driver_adc.c 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. //======================================================
  2. // File Name: BK_ADC_Api.c.c
  3. // Author: yubei
  4. // Created Date: @2015-03-20
  5. // Description: Project BK3231S - Test Firmware for Massive Production
  6. // ADC protocol
  7. // Main code of Firmware Test of BK3231S
  8. //======================================================
  9. #include "include.h"
  10. #include "DeviceBtj_Header.h"
  11. #include "u_global.h"
  12. void ADC_Init(uint8 adc_channel)
  13. {
  14. uint32 adc_config_value ;
  15. REG_AHB0_ICU_ADCCLKCON = 0x00; //enable ADC clk
  16. adc_config_value = 0x0 ;
  17. adc_config_value |= (0x01 << BIT_ADC_MODE ) ; //step mode
  18. adc_config_value |= (adc_channel << BIT_ADC_CHNL ) ; //0 chn
  19. adc_config_value |= (0 << BIT_ADC_SAMPLE_RATE ) ; //adc_clk/36 in continue
  20. adc_config_value |= (0 << BIT_ADC_WAIT_CLK_SETTING) ; //wait 4 clk
  21. adc_config_value |= (1 << BIT_ADC_VALID_MODE ) ; //when from power dowm, 1 data is vaild
  22. adc_config_value |= (1 << BIT_ADC_CLK_RATE ) ;// clk/8
  23. REG_APB7_ADC_CFG = adc_config_value ;
  24. REG_APB5_GPIO3_CFG &= ~(1<<adc_channel);
  25. REG_APB5_GPIO3_CFG |= (1<<(adc_channel+8));
  26. // REG_APB5_GPIO3_CFG = 0xFF00;
  27. // REG_APB5_GPIO3_DATA |= (0x3<<BIT_GPIO_INPUT_EN);
  28. // U_UART_PRINTF("ch=%d,ADC_CFG=%08X,GPIO3_CFG=%08X,GPIO3_DATA=%08X\n", adc_channel, REG_APB7_ADC_CFG, REG_APB5_GPIO3_CFG, REG_APB5_GPIO3_DATA);
  29. REG_AHB0_ICU_INT_ENABLE |= (INT_STATUS_ADC|INT_STATUS_ADC_WAKEUP);
  30. }
  31. void ADC_Deinit(uint8 adc_channel)
  32. {
  33. //BK3000_ADC_CONFIG = (7<<16);
  34. REG_APB7_ADC_CFG &= ~SET_ADC_EN;
  35. REG_AHB0_ICU_ADCCLKCON = 0x01; //CLOSE adc clk
  36. REG_APB5_GPIO3_CFG |= ((0x1<<adc_channel));// GPIO PD 0-7 for gpio
  37. REG_AHB0_ICU_INT_ENABLE &= ~(INT_STATUS_ADC|INT_STATUS_ADC_WAKEUP);
  38. }
  39. void ADC_Cancel(void)
  40. {
  41. REG_APB7_ADC_CFG &= ~SET_ADC_EN;
  42. }
  43. void ADC_Set_Chn(uint8 chn)
  44. {
  45. uint32 adc_config_value ;
  46. adc_config_value = REG_APB7_ADC_CFG & (~(0x7<<BIT_ADC_CHNL));
  47. adc_config_value |= (chn << BIT_ADC_CHNL ) ;
  48. REG_APB7_ADC_CFG = adc_config_value;
  49. }
  50. uint8 ADC_Get_Value(void)
  51. {
  52. static uint8 temp_adc_data;
  53. uint16 adc_cnt=0;
  54. sys_flag &= ~FLAG_ADC_BUZY;
  55. REG_APB7_ADC_CFG |= SET_ADC_EN+(0x01 << BIT_ADC_MODE );
  56. while (!(sys_flag&FLAG_ADC_BUZY))//(REG_APB7_ADC_CFG&(0x01<<BIT_ADC_FIFO_BUSY));
  57. {
  58. adc_cnt++;
  59. if(adc_cnt>500)
  60. {
  61. break;
  62. }
  63. }
  64. if(sys_flag&FLAG_ADC_BUZY)
  65. {
  66. temp_adc_data=(REG_APB7_ADC_DAT>>2);
  67. }
  68. return temp_adc_data;//(REG_APB7_ADC_DAT>>2);
  69. }