[菜农助学交流] tendence第五帖:AD转换器(中断方式+库函数)

[复制链接]
2999|6
 楼主| tendence 发表于 2011-11-21 20:45 | 显示全部楼层 |阅读模式
折腾良久,终于完成了ADC的编程了。很是开心。
但是玩M0得暂时停下了,还得顾着点学业啊!好几次点名没到了,不能太不给老师面子啊!
话不多说,上代码
hw_config.c

  1. #include "includes.h"  //包含所需的头文件
  2. /*************************************************************************************
  3. ** Function name:       Set_System
  4. ** Descriptions:       系统
  5. ** input parameters:    无
  6. ** output parameters:   无
  7. ** Returned value:      无
  8. *************************************************************************************/
  9. void RCC_Configuration(void);
  10. void GPIO_Configuration( void);
  11. void UART_Configuration(void );
  12. void UART_INT_HANDLE(uint32_t );
  13. void ADC_Configuration(void);
  14. void ADCInt(uint32_t u32UserData );
  15. void Set_System(void)
  16. {
  17.   RCC_Configuration( );      //配置系统时钟
  18.   GPIO_Configuration( );     //配置GPIO
  19.   UART_Configuration( ); //配置UART
  20.   ADC_Configuration( );
  21. }
  22. void ADC_Configuration(void)
  23. {
  24.    DrvADC_Open(ADC_SINGLE_END, ADC_SINGLE_OP, 2, EXTERNAL_12MHZ, 5);
  25.    // ADC_SINGLE_END 输入模式
  26.    //  ADC_SINGLE_OP 操作模式
  27.    //通道1
  28.    //外部12M晶振
  29.    //频率12M/(5+1)
  30.    DrvADC_EnableADCInt(ADCInt,0);
  31. }
  32. void ADCInt(uint32_t u32UserData )
  33. {
  34. float value;
  35. value=DrvADC_GetConversionData(1);
  36. printf("%f\n\n",value*(3.3)/(0xfff));
  37. }
  38. /*************************************************************************************
  39. ** Function name:       RCC_Configuration
  40. ** Descriptions:        系统时钟源设置
  41. ** input parameters:    none
  42. ** output parameters:   none
  43. ** Returned value:      none
  44. *************************************************************************************/
  45. void RCC_Configuration(void)
  46. {
  47.    UNLOCKREG();                   // 对写保护位操作时 需要一次向0x50000 0100写入 0x59,0x16,0x88,
  48.    DrvSYS_SetOscCtrl(E_SYS_XTL12M, 1);//与其 SYSCLK->PWRCON.XTL12M_EN = 1; 等同
  49.                                       // PWRCON寄存器(这些寄存器在上电复位到用户解锁定之前是锁定的)除了 BIT[6]位其他位都受写保护
  50.                                    // 解除这些需要向 0x50000 0100写入 0x59,0x16,0x88              // 令PWRCON寄存器的BITP[0]为1(即设定12M外部晶振)
  51.    delay_ms(100);                                   //while (DrvSYS_GetChipClockSourceStatus(E_SYS_XTL12M) != 1);//等待外部12MHZ晶振就绪
  52.    LOCKREG();                   // 向“0x5000_0100”写入任何值,就可以重锁保护寄存器
  53. }
  54. /*************************************************************************************
  55. ** Function name:       GPIO_Configuration
  56. ** Descriptions:        端口配置
  57. ** input parameters:    none
  58. ** output parameters:   none
  59. ** Returned value:      none
  60. *************************************************************************************/
  61. void GPIO_Configuration()
  62. {
  63.   // DrvGPIO_Open( E_GPA, 2, E_IO_OUTPUT );
  64.   // DrvGPIO_Open( E_GPA, 3, E_IO_OUTPUT );
  65.   // DrvGPIO_Open( E_GPA, 4, E_IO_OUTPUT );
  66.   //DrvGPIO_Open( E_GPA, 5, E_IO_OUTPUT );
  67.   DrvGPIO_Open( E_GPA, 1, E_IO_INPUT ); //AD1
  68. }
  69. /*************************************************************************************
  70. ** Function name:       delay_ms
  71. ** Descriptions:        1ms(晶振为12MHZ)延时子程序
  72. ** input parameters:    count
  73. ** output parameters:   无
  74. ** Returned value:      无
  75. *************************************************************************************/
  76. void UART_Configuration()
  77. {
  78.   STR_UART_T param;
  79.    
  80.   DrvSYS_SelectIPClockSource(E_SYS_UART_CLKSRC, 0);    //  使能UART时钟
  81.   DrvGPIO_InitFunction(E_FUNC_UART0);        //  复用功能引脚设置
  82.   
  83.      param.u32BaudRate        = 115200;        //  波特率
  84.      param.u8cDataBits        = DRVUART_DATABITS_8;     //  数据位
  85.      param.u8cStopBits        = DRVUART_STOPBITS_1;     //  停止位
  86.      param.u8cParity          = DRVUART_PARITY_NONE;     //  校验位
  87.      param.u8cRxTriggerLevel  = DRVUART_FIFO_1BYTES;     //  FIFO存储深度 1 字节
  88.      param.u8TimeOut          = 0;         //  FIFO超时设定
  89.      DrvUART_Open(UART_PORT0, &param);        //  串口开启、结构体整体赋值
  90. // DrvUART_EnableInt(UART_PORT0, DRVUART_RDAINT,UART_INT_HANDLE);  //接收数据中断
  91.                   
  92. }
  93. void delay_ms(uint32_t count)
  94. {
  95.     uint32_t i,j;
  96. for(i=count;i>0;i--)
  97.     for(j=2395;j>0;j--);
  98. }

includes.h

  1. #include <stdio.h>
  2. #include "NUC1xx.h"
  3. #include "DrvUART.h"
  4. #include "variables.h"
  5. #include "hw_config.h"
  6. #include "Driver\DrvGPIO.h"
  7. #include "Driver\DrvSYS.h"
  8. #include "Driver\DrvADC.h"

main.c

  1. #include"includes.h"

  2. int main (void)
  3. {
  4. Set_System();

  5. while(1)
  6. {
  7.   DrvADC_StartConvert();

  8.   delay_ms(1000);
  9.   
  10. };
  11. }

 楼主| tendence 发表于 2011-11-21 20:45 | 显示全部楼层
本帖最后由 tendence 于 2011-11-21 20:51 编辑


有图有真相
工程文件

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| tendence 发表于 2011-11-21 20:50 | 显示全部楼层

这个RT是不是就是  MFD-103AT热敏电阻
是的话不就可以做温度测量啦?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| tendence 发表于 2011-11-21 21:43 | 显示全部楼层
R13是多大?
mcu123AD 发表于 2011-11-22 12:51 | 显示全部楼层
R13是10K。
 楼主| tendence 发表于 2011-11-22 13:07 | 显示全部楼层
hotpower 发表于 2011-11-22 13:20 | 显示全部楼层
他就是www.mcu123.com的站长。那里的资料众多,欢迎大家“品尝”
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:把技术记在心里

1

主题

164

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部