[新手园地] 【第三批】学习笔记4:半主机调试ADC采集结果(NEW)

[复制链接]
 楼主| 564451696 发表于 2011-10-21 07:55 | 显示全部楼层 |阅读模式
在库V1.05.002版本下,实现半主机调试,可以不用串口通道实现串口功能,非常好用,在此感谢9哥和烈火狂龙提供的帖子。本人实现半主机调试修改两处:1.在startup_NUC1xx.s文件第10行“SEMIHOSTED       SETL    {FALSE}”修改为“SEMIHOSTED       SETL    {TRUE}”;
                                       2.在retarget.c文件下,在第21行处添加
#define DEBUG_ENABLE_SEMIHOST   /* To enable semihosted. !!!The SEMIHOSTED of startup_NUC1xx.s must be {TRUE} */

/* Using UART0 or UART1 */  
#define DEBUG_PORT   0
    /*0:UART0  1:UART1 2:UART2 */
PS:经本人调试成功,忘记截图。
  1. /*********************************************************************************************
  2. *                    菜农新唐M0助学交流(Q群:12047788)
  3. * 模块名称:定时器中断的使用
  4. * 创建时间:2011-10-20
  5. * 所属公司 : 火星菜农集团
  6. * 文件名称:         Main.c
  7. * 作者 :  周炳权
  8. * 功能描述:        按KEY2进入中断驱动蜂鸣器;按KEY2进入,点亮流水灯驱动蜂鸣器。
  9.                         定时器0关蜂鸣器(500ms)
  10. *----------------------------------------------------------------
  11. 修改记录:

  12. 修改日期:

  13. 修改人:

  14. **********************************************************************************************************/

  15. #include <stdio.h>
  16. #include "NUC1xx.h"
  17. #include "DrvGPIO.h"
  18. #include "DrvSYS.h"
  19. #include "DrvTIMER.h"
  20. #include "DrvADC.h"
  21. #include "DrvUART.h"
  22. uint32_t uTimerEventNo[4];
  23. /********************************************************************
  24. *@作者:周炳权
  25. *@功能:外部中断0回调函数
  26. *
  27. *@输入:          NONE
  28. *@输出:        NONE
  29. ********************************************************************/
  30. void EINT0CALLBACK( void )
  31. {
  32.         DrvGPIO_SetBit( E_GPB, 10);
  33.         return;
  34. }
  35. /********************************************************************
  36. *@作者:周炳权
  37. *@功能:外部中断0回调函数
  38. *
  39. *@输入:          NONE
  40. *@输出:        NONE
  41. ********************************************************************/
  42. void TMR0_Callback( void )
  43. {
  44.        
  45.         DrvGPIO_ClrBit( E_GPB, 10);
  46.         return;
  47. }
  48. /********************************************************************
  49. *@作者:周炳权
  50. *@功能:流水灯函数
  51. *
  52. *@输入:          NONE
  53. *@输出:        NONE
  54. ********************************************************************/
  55. void LED_Gilde( void )
  56. {
  57.         DrvGPIO_ClrBit( E_GPA, 2);
  58.         DrvSYS_Delay(50000);
  59.         DrvGPIO_SetBit( E_GPA, 2);
  60.     DrvSYS_Delay(50000);
  61.         DrvGPIO_ClrBit( E_GPA, 3);
  62.         DrvSYS_Delay(50000);
  63.         DrvGPIO_SetBit( E_GPA, 3);
  64.         DrvSYS_Delay(50000);
  65.         DrvGPIO_ClrBit( E_GPA, 4);
  66.         DrvSYS_Delay(50000);
  67.         DrvGPIO_SetBit( E_GPA, 4);
  68.         DrvSYS_Delay(50000);
  69.         DrvGPIO_ClrBit( E_GPA, 5);
  70.         DrvSYS_Delay(50000);
  71.         DrvGPIO_SetBit( E_GPA, 5);
  72.         DrvSYS_Delay(50000);
  73.         DrvGPIO_SetBit( E_GPB, 10);
  74.         return;
  75. }
  76. /********************************************************************
  77. *@作者:周炳权
  78. *@功能:系统初始化函数
  79. *
  80. *@输入:          NONE
  81. *@输出:        NONE
  82. ********************************************************************/
  83. void SYS_Init( void )
  84. {
  85.         UNLOCKREG(x);                                                 /*芯片注册解锁*/
  86.         SYSCLK->PWRCON.XTL12M_EN =1;                 /*设定12M外部晶振*/
  87. //        LOCKREG(x);                                                         /*芯片上锁*/

  88.         DrvSYS_Delay(5000);                                         /*等待时钟就绪*/

  89.         DrvTIMER_Init();                                         /*初始化定时器*/

  90.         DrvSYS_SelectIPClockSource(E_SYS_TMR0_CLKSRC, 0);          /*选择定时器时钟源为外部12MHz*/
  91.     DrvSYS_SelectIPClockSource(E_SYS_TMR1_CLKSRC, 0);
  92.     DrvSYS_SelectIPClockSource(E_SYS_TMR2_CLKSRC, 0);
  93.     DrvSYS_SelectIPClockSource(E_SYS_TMR3_CLKSRC, 0);

  94.         DrvGPIO_Open( E_GPA, 2, E_IO_OUTPUT);/*设置端口GPA2为输出模式*/
  95.         DrvGPIO_Open( E_GPA, 3, E_IO_OUTPUT);/*设置端口GPA3为输出模式*/
  96.         DrvGPIO_Open( E_GPA, 4, E_IO_OUTPUT);/*设置端口GPA4为输出模式*/
  97.         DrvGPIO_Open( E_GPA, 5, E_IO_OUTPUT);/*设置端口GPA5为输出模式*/
  98.         DrvGPIO_Open( E_GPB, 15, E_IO_INPUT);/*设置端口GPB15为输入模式*/
  99.         DrvGPIO_Open( E_GPB, 14, E_IO_INPUT);/*设置端口GPB14为输入模式*/
  100.         DrvGPIO_Open( E_GPB, 10, E_IO_OUTPUT);/*设置端口GPB10为输出模式*/
  101.         DrvGPIO_ClrBit( E_GPB, 10);                        /*禁止蜂鸣器工作*/

  102.         DrvGPIO_EnableInt( E_GPB, 14, E_IO_FALLING, E_MODE_EDGE);        /*设置端口GPB14为外部中断模式*/
  103.         DrvGPIO_SetDebounceTime(10, E_DBCLKSRC_10K);   
  104.     DrvGPIO_EnableDebounce(E_GPB, 14);
  105.         DrvGPIO_InitFunction( E_FUNC_EXTINT0);                 /*指定外部中断0引脚功能*/
  106.         DrvGPIO_EnableEINT0( E_IO_FALLING, E_MODE_EDGE, EINT0CALLBACK);

  107.         DrvTIMER_Open(E_TMR0, 2, E_PERIODIC_MODE);        /*500ms,周期模式*/
  108.         uTimerEventNo[0] = DrvTIMER_SetTimerEvent(E_TMR0, 2, (TIMER_CALLBACK)TMR0_Callback, 0);  /*设置定时处理事件*/
  109.         DrvTIMER_EnableInt(E_TMR0); /*使能定时器0中断*/
  110.         DrvTIMER_Start(E_TMR0);          /*开始计数*/

  111.         return;
  112. }
  113. /********************************************************************
  114. *@作者:周炳权
  115. *@功能:ADC初始化函数
  116. *
  117. *@输入:          NONE
  118. *@输出:        NONE
  119. ********************************************************************/
  120. void ADC_Init( void )
  121. {
  122.         DrvGPIO_InitFunction( E_FUNC_ADC1 );   /*初始化ADC1功能*/
  123.         DrvADC_Open( ADC_SINGLE_END, ADC_CONTINUOUS_OP,
  124.                                 0x02, EXTERNAL_12MHZ, 5);  /*使能ADC功能并完成相关设定*/
  125.         return;
  126. }
  127. /********************************************************************
  128. *@作者:周炳权
  129. *@功能:ADC初始化函数
  130. *
  131. *@输入:          NONE
  132. *@输出:        NONE
  133. ********************************************************************/
  134. void UART_Init( void )
  135. {
  136.         STR_UART_T param;
  137.                
  138.         DrvSYS_SelectIPClockSource(E_SYS_UART_CLKSRC, 0);                         //         enable the UART`s clock
  139.         DrvGPIO_InitFunction(E_FUNC_UART0);                                                         //         set the multiplex pin to UART
  140.        
  141.     param.u32BaudRate        = 115200;                                                         //         baud rate
  142.     param.u8cDataBits        = DRVUART_DATABITS_8;                                 //         data bit
  143.     param.u8cStopBits        = DRVUART_STOPBITS_1;                                 //         stop bit
  144.     param.u8cParity          = DRVUART_PARITY_NONE;                                 //         test bit
  145.     param.u8cRxTriggerLevel  = DRVUART_FIFO_1BYTES;                                 //         depth of FIFO`s store
  146.     param.u8TimeOut                 = 0;                                                                 //         FIFO time-over setting
  147.     DrvUART_Open(UART_PORT0, &param);                                                         //         open the UART
  148.         return;
  149. }
  150. /********************************************************************
  151. *@作者:周炳权
  152. *@功能:主函数
  153. *
  154. *@输入:          NONE
  155. *@输出:        NONE
  156. ********************************************************************/
  157. void ADC_OUTPUT_Display( uint32_t r_adc_data )
  158. {
  159.         uint8_t Display_Buffer[] = "当前电压:0.00V\r\n";
  160.         r_adc_data = r_adc_data * 330 / 4095;                          //system supply 3.3V, and the precision is 12 bits.
  161.         Display_Buffer[9] = r_adc_data / 100 + '0';
  162.         Display_Buffer[11] = r_adc_data / 10 % 10+'0';
  163.         Display_Buffer[12] = r_adc_data % 10 + '0';

  164.         DrvUART_Write(UART_PORT0, Display_Buffer, 18);//真实串口输出数据
  165.         printf(Display_Buffer);//半主机调试信息输出
  166. }
  167. /********************************************************************
  168. *@作者:周炳权
  169. *@功能:主函数
  170. *
  171. *@输入:          NONE
  172. *@输出:        NONE
  173. ********************************************************************/
  174. int main( void )
  175. {
  176.         SYS_Init();
  177.         ADC_Init();
  178.         UART_Init();

  179.         DrvADC_StartConvert();

  180.         printf("\n\r\n\r");
  181.         printf("************************************\n\r");
  182.         printf("        菜农新唐M0助学交流学习笔记                \n\r");
  183.         printf("        学习笔记4:半主机调试ADC                \n\r");
  184.         printf("        愛新覺羅 權-->21icID:564451696        \n\r");
  185.         printf("        ("__DATE__" -- "__TIME__")                \n\r");
  186.         printf("************************************\n\r");

  187.         while(1)
  188.         {
  189.                 if(DrvGPIO_GetBit( E_GPB, 15) == 0)
  190.                 {
  191.                         LED_Gilde();
  192.                 }
  193.        
  194.                 ADC_OUTPUT_Display( DrvADC_GetConversionData(1) );
  195.                 DrvSYS_Delay( 500000 );
  196.         }

  197. }

本帖子中包含更多资源

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

×
 楼主| 564451696 发表于 2011-10-21 08:26 | 显示全部楼层
具体软件设置和窗口显示请参考烈火狂龙的帖子http://bbs.21ic.com/viewthread.p ... A%E8%B0%83%E8%AF%95
本人不再重复表述。
ichuangj 发表于 2011-10-23 15:34 | 显示全部楼层
如何做半主机调试?有哪些优点?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:Stay hungry,stay foolish.

1

主题

157

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部
个人签名:Stay hungry,stay foolish.

1

主题

157

帖子

0

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