[Cortex-M0技术交流] 菜鸟学习M0第八帖——LED

[复制链接]
 楼主| lixiaoxu2meng 发表于 2011-8-27 07:53 | 显示全部楼层 |阅读模式
LED, IO, TI, gp, AD
本工程有TIMER来实现四段数码管的动态扫描,实时显示AD采样值,
main函数
  1. /*---------------------------------------------------------------------------------------------------------*/
  2. /* */
  3. /* Copyright(c) 2011 Nuvoton Technology Corp. All rights reserved. */
  4. /* */
  5. /*---------------------------------------------------------------------------------------------------------*/
  6. #include "includes.h" //包含所需的头文件
  7. /*************************************************************************************
  8. ** Function name: main
  9. ** Descriptions: LED
  10. ** input parameters: 无
  11. ** output parameters: 无
  12. ** Returned value: 无
  13. *************************************************************************************/
  14. int main (void)
  15. {
  16. Set_System(); //封装一些初始化模块
  17. DrvSYS_SelectSysTickSource(2); //改变SysTick时钟源。
  18. SystemCoreClockUpdate(); //更新内核时钟。
  19. while(1)
  20. {
  21. DrvADC_StartConvert(); // 开启ADC转换
  22. while(DrvADC_IsConversionDone()==FALSE); // 判断ADC是否转换结束
  23. value = DrvADC_GetConversionData(1); // 读取AD值
  24. DrvSYS_Delay(300000); // 0.3s
  25. }
  26. }


hw_config.c
  1. #include "includes.h" //包含所需的头文件
  2. /*************************************************************************************
  3. ** Function name: Set_System
  4. ** Descriptions: 封装一些初始化模块
  5. ** input parameters: count
  6. ** output parameters: 无
  7. ** Returned value: 无
  8. *************************************************************************************/
  9. void Set_System(void)
  10. {
  11. RCC_Configuration(); //配置系统时钟

  12. GPIO_Configuration(); //配置GPIO

  13. TIMER_Configuration(); //配置TIMER

  14. ADC_Configuration(); //配置ADC

  15. }
  16. /*************************************************************************************
  17. ** Function name: RCC_Configuration
  18. ** Descriptions: 系统时钟源设置
  19. ** input parameters: none
  20. ** output parameters: none
  21. ** Returned value: none
  22. *************************************************************************************/
  23. void RCC_Configuration(void)
  24. {
  25. UNLOCKREG(); // 对写保护位操作时 需要一次向0x50000 0100写入 0x59,0x16,0x88,
  26. DrvSYS_SetOscCtrl(E_SYS_XTL12M, 1);//与其 SYSCLK->PWRCON.XTL12M_EN = 1; 等同
  27. // PWRCON寄存器(这些寄存器在上电复位到用户解锁定之前是锁定的)除了 BIT[6]位其他位都受写保护
  28. // 解除这些需要向 0x50000 0100写入 0x59,0x16,0x88,
  29. // 令PWRCON寄存器的BITP[0]为1(即设定12M外部晶振)
  30. delay_ms(100); //while (DrvSYS_GetChipClockSourceStatus(E_SYS_XTL12M) != 1);//等待外部12MHZ晶振就绪
  31. LOCKREG(); // 向“0x5000_0100”写入任何值,就可以重锁保护寄存器
  32. }
  33. /*************************************************************************************
  34. ** Function name: GPIO_Configuration
  35. ** Descriptions: GPIO配置
  36. ** input parameters: none
  37. ** output parameters: none
  38. ** Returned value: none
  39. *************************************************************************************/
  40. void GPIO_Configuration()
  41. {
  42. DrvGPIO_Open( E_GPA, 2, E_IO_OUTPUT );//数码管段选
  43. DrvGPIO_Open( E_GPA, 3, E_IO_OUTPUT );
  44. DrvGPIO_Open( E_GPA, 4, E_IO_OUTPUT );
  45. DrvGPIO_Open( E_GPA, 5, E_IO_OUTPUT );
  46. DrvGPIO_Open( E_GPA, 6, E_IO_OUTPUT );
  47. DrvGPIO_Open( E_GPA, 7, E_IO_OUTPUT );
  48. DrvGPIO_Open( E_GPA, 8, E_IO_OUTPUT );
  49. DrvGPIO_Open( E_GPA, 9, E_IO_OUTPUT );
  50. DrvGPIO_Open( E_GPC, 14, E_IO_OUTPUT );//数码管位选
  51. DrvGPIO_Open( E_GPC, 15, E_IO_OUTPUT );
  52. DrvGPIO_Open( E_GPC, 6, E_IO_OUTPUT );
  53. DrvGPIO_Open( E_GPC, 7, E_IO_OUTPUT );
  54. DrvGPIO_Open( E_GPA, 1, E_IO_INPUT ); //AD1
  55. }
  56. /*************************************************************************************
  57. ** Function name: TIMER_Configuration
  58. ** Descriptions: TIMER配置
  59. ** input parameters: none
  60. ** output parameters: none
  61. ** Returned value: none
  62. *************************************************************************************/
  63. void TIMER_Configuration()
  64. {
  65. DrvTIMER_Init(); //初始化定时器

  66. DrvSYS_SelectIPClockSource(E_SYS_TMR0_CLKSRC,0); //设定TIMER0的时钟源为外部12MHZ

  67. DrvTIMER_Open(E_TMR0,1000,E_PERIODIC_MODE); //设定定时器timer0的tick周期,并且启动定时器:定时器通道 TMR0 每秒1000次 周期模式

  68. DrvTIMER_SetTimerEvent(E_TMR0,5,(TIMER_CALLBACK) Timer0_Callback,0); //安装一个定时处理事件到 timer0通道

  69. DrvTIMER_EnableInt(E_TMR0); //使能定时器中断 //TIMER0->TCSR.IE = 1

  70. DrvTIMER_Start(E_TMR0); //定时器timer0开始计数 //TIMER0->TCSR.CEN = 1;
  71. }
  72. /*************************************************************************************
  73. ** Function name: ADC_Configuration
  74. ** Descriptions: 配置ADC
  75. ** input parameters: none
  76. ** output parameters: none
  77. ** Returned value: none
  78. *************************************************************************************/
  79. void ADC_Configuration()
  80. {
  81. DrvADC_Open(ADC_SINGLE_END, ADC_SINGLE_OP, 0, EXTERNAL_12MHZ, 3); // ADC_SINGLE_END AD为单端输入模式
  82. // ADC_SINGLE_OP 单一转换
  83. // 1 GA0作为输入 模式输入通道使能
  84. // EXTERNAL_12MHZ ADC时钟为 外部12MHZ
  85. // 3 AD时钟频率 = ADC时钟/(3+1) = 3MHZ
  86. DrvADC_SetADCChannel(0x02,ADC_SINGLE_END); // 2 GA1作为输入 模式输入通道使能
  87. // ADC_SINGLE_END AD为单端输入模式
  88. ADC->ADCR.DMOF = 0; //转化结果无符号
  89. }
  90. /*************************************************************************************
  91. ** Function name: Timer0_Callback
  92. ** Descriptions: 定时处理事件,LED动态扫描
  93. ** input parameters: none
  94. ** output parameters: none
  95. ** Returned value: none
  96. *************************************************************************************/
  97. void Timer0_Callback (void)
  98. {
  99. static uint8_t count= 0;
  100. static uint8_t i,xx[4];
  101. uint32_t data;
  102. uint16_t ValueBuff ;
  103. ValueBuff = value;
  104. count++;
  105. if(count >= 5)
  106. count = 1;
  107. for(i=0;i<4;i++)
  108. {
  109. xx[i] = ValueBuff%10;
  110. ValueBuff = ValueBuff/10;
  111. }
  112. switch(count)
  113. {
  114. case 1:
  115. DrvGPIO_SetBit(E_GPC,14);
  116. DrvGPIO_ClrBit(E_GPC,15);
  117. DrvGPIO_ClrBit(E_GPC,6);
  118. DrvGPIO_ClrBit(E_GPC,7);
  119. data = Table[xx[0]]<<2;
  120. GPIOA->DOUT = data;
  121. break;
  122. case 2:
  123. DrvGPIO_SetBit(E_GPC,15);
  124. DrvGPIO_ClrBit(E_GPC,14);
  125. DrvGPIO_ClrBit(E_GPC,6);
  126. DrvGPIO_ClrBit(E_GPC,7);
  127. data = Table[xx[1]]<<2;
  128. GPIOA->DOUT = data;
  129. break;
  130. case 3:
  131. DrvGPIO_SetBit(E_GPC,7);
  132. DrvGPIO_ClrBit(E_GPC,14);
  133. DrvGPIO_ClrBit(E_GPC,15);
  134. DrvGPIO_ClrBit(E_GPC,6);
  135. data = Table[xx[2]]<<2;
  136. GPIOA->DOUT = data;
  137. break;
  138. case 4:
  139. DrvGPIO_SetBit(E_GPC,6);
  140. DrvGPIO_ClrBit(E_GPC,14);
  141. DrvGPIO_ClrBit(E_GPC,15);
  142. DrvGPIO_ClrBit(E_GPC,7);
  143. data = Table[xx[3]]<<2;
  144. GPIOA->DOUT = data;
  145. DrvGPIO_ClrBit(E_GPA,9); //显示小数点
  146. break;
  147. default:break;
  148. }
  149. }

  150. /*************************************************************************************
  151. ** Function name: delay_ms
  152. ** Descriptions: 1ms(晶振为12MHZ)延时子程序
  153. ** input parameters: count
  154. ** output parameters: 无
  155. ** Returned value: 无
  156. *************************************************************************************/
  157. void delay_ms(uint32_t count)
  158. {
  159. uint32_t i,j;
  160. for(i=count;i>0;i--)
  161. for(j=2395;j>0;j--);
  162. }

hw_config.h头文件
  1. #ifndef __HW_CONFIG_H__
  2. #define __HW_CONFIG_H__
  3. void Set_System(void);
  4. void RCC_Configuration(void);
  5. void GPIO_Configuration(void);
  6. void TIMER_Configuration(void);
  7. void ADC_Configuration(void);
  8. void Timer0_Callback (void);
  9. void delay_ms(uint32_t count);
  10. #endif

其他的不贴了,都在工程里
截图
工程

本帖子中包含更多资源

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

×
plc_avr 发表于 2011-8-27 08:42 | 显示全部楼层
不错!帮顶!
 楼主| lixiaoxu2meng 发表于 2011-8-27 09:24 | 显示全部楼层
2# plc_avr
3Q
hotpower 发表于 2011-8-27 10:50 | 显示全部楼层
很好!一位好MM!在外,回去加入选榜
hotpower 发表于 2011-8-28 14:59 | 显示全部楼层
感觉该SPI和I2C及PWM了
 楼主| lixiaoxu2meng 发表于 2011-8-28 17:39 | 显示全部楼层
5# hotpower
呵呵 恩 过两天再弄 这两天没时间
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

1679

帖子

2

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

0

主题

1679

帖子

2

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