[新手园地] HOT大叔NUC120助学板第二贴----安个监视器

[复制链接]
 楼主| Swallow_0322 发表于 2011-3-18 07:55 | 显示全部楼层 |阅读模式
本帖最后由 Swallow_0322 于 2011-3-30 16:39 编辑

  1. /*
  2.     借着HOT大叔助学的东风,献丑第二贴,给你的程序先装个监视器,O(∩_∩)O~
  3. UART练习。废话不说上源码,希望大家不吝批评赐教!
  4.     按照第一帖建立工程及配置工程即可!
  5.     下载可参考菜农助学板活动-第0课板子初次使用!
  6.     本程序参考新唐库及神的指导教程!
  7. */

  8. /**************************************************
  9. ** 文件名称:NUC120_HOT_UART.c
  10. ** 文件说明:NUC120助学板练习程序
  11. ** 创建日期:2011-03-07
  12. ** 修改日期:
  13. ** 备    注:Uart0中断接收查询发送练习
  14. **************************************************/
  15. #include <stdio.h>
  16. #include "NUC1xx.h"
  17. #include "Driver\DrvGPIO.h"
  18. #include "Driver\DrvSYS.h"
  19. #include "Driver\DrvUART.h"

  20. #define RXBUFSIZE 100

  21. volatile uint16_t comRhead         = 0;
  22. volatile uint16_t comRtail         = 0;
  23. volatile uint8_t g_bWait         = FALSE;
  24. uint8_t comRbuf[100];
  25. uint32_t comRbytes = 0;        
  26. uint8_t  Run_Led = 4;                                //2----LED1  3----LED2          4----LED3  5----LED4

  27. /***************
  28. **  函数声明  **
  29. ***************/
  30. void Init_System (void);
  31. void Init_Uart (void);
  32. void UART_INT_HANDLE(uint32_t u32IntStatus);


  33. /*****************************
  34. ** Name:      UART_INT_HANDLE
  35. ** Function:  UART Callback function
  36. ** Input:     u32IntStatus
  37. ** OutPut:    None
  38. ** Data:      2011-03-17
  39. ** Note:      
  40. ****************************/
  41. void UART_INT_HANDLE(uint32_t u32IntStatus)
  42. {

  43.         uint8_t bInChar[1]={0xFF};

  44.         if(u32IntStatus & DRVUART_RDAINT)
  45.         {
  46.                 /* Get all the input characters */
  47.                 while(UART0->ISR.RDA_IF==1)
  48.                 {
  49.                         /* Get the character from UART Buffer */
  50.                         DrvUART_Read(UART_PORT0,bInChar,1);

  51.                         /* Check if buffer full */
  52.                         if(comRbytes < RXBUFSIZE)
  53.                         {
  54.                                 /* Enqueue the character */
  55.                                 comRbuf[comRtail] = bInChar[0];
  56.                                 comRtail = (comRtail == (RXBUFSIZE-1)) ? 0 : (comRtail+1);
  57.                                 comRbytes++;
  58.                         }                                                
  59.                 }
  60.         }
  61. }

  62. /*****************************
  63. ** Name:      Init_System
  64. ** Function:  系统初始化函数
  65. ** Input:      None
  66. ** OutPut:     None
  67. ** Data:       2011-03-17
  68. ** Note:      
  69. ****************************/
  70. void Init_System(void)
  71. {
  72.         /* Unlock the locked registers before access */
  73.     UNLOCKREG();        //寄存器锁定键地址寄存器(RegLockAddr) :有些系统控制寄存器需要被保护起来,以防止误操作而影响芯片运行,
  74.                                     //这些寄存器在上电复位到用户解锁定之前是锁定的。用户可以连续依次写入“59h”, “16h” “88h”到0x5000_0100解锁定.
  75.         /* Enable the 12MHz oscillator oscillation */
  76.         DrvSYS_SetOscCtrl(E_SYS_XTL12M, 1);                                                                //SYSCLK->WRCON.XTL12M_EN = 1;

  77.         /* Waiting for 12M Xtal stable */
  78.         //while (DrvSYS_GetChipClockSourceStatus(E_SYS_XTL12M) != 1);                //SYSCLK->CLKSTATUS.XTL12M_STB
  79.         /*eClkSrc  - [in]  E_SYS_XTL12M / E_SYS_XTL32K / E_SYS_OSC22M / E_SYS_OSC10K / E_SYS_PLL    */
  80.         // Note: Only some of NuMicro NUC100 Series support this function.

  81.         DrvSYS_Delay(5000);
  82.         LOCKREG();
  83.         //向“0x5000_0100”写入任何值,就可以重锁保护寄存器
  84. }

  85. /*****************************
  86. ** Name:      Init_Uart
  87. ** Function:  UART初始化函数
  88. ** Input:      None
  89. ** OutPut:     None
  90. ** Data:       2011-03-17
  91. ** Note:      
  92. ****************************/
  93. void Init_Uart(void)
  94. {
  95.         STR_UART_T param;
  96.         /*
  97.         声明 UART设置的结构体 位于DRVUART.H
  98.         结构体如下
  99.         typedef struct DRVUART_STRUCT
  100.         {
  101.                 uint32_t            u32BaudRate;                        
  102.                 E_DATABITS_SETTINS  u8cDataBits;                        
  103.                 E_STOPBITS_SETTINS  u8cStopBits;                        
  104.                 E_PARITY_SETTINS         u8cParity;                                 
  105.                 E_FIFO_SETTINGS     u8cRxTriggerLevel;                 
  106.                 uint8_t             u8TimeOut ;                                 
  107.       }STR_UART_T;
  108.         */
  109.         DrvSYS_SelectIPClockSource(E_SYS_UART_CLKSRC,0);                    //使能UART时钟
  110.         //SYSCLK->CLKSEL1.UART_S = 0;                //UART时钟源选择. 00 =外部12MHz 晶振 01 = PLL 1x =内部 22MHz 振荡器

  111.         DrvGPIO_InitFunction(E_FUNC_UART0);                                                    //GPB_MFP0-1-2-3置位 GPIO使能UART功能
  112.         //outpw(&SYS->GPBMFP, inpw(&SYS->GPBMFP) | (0xF<<0));

  113.         param.u32BaudRate        = 115200;                                                        //         波特率
  114.         param.u8cDataBits        = DRVUART_DATABITS_8;                                //         数据位
  115.         param.u8cStopBits        = DRVUART_STOPBITS_1;                                //         停止位
  116.         param.u8cParity          = DRVUART_PARITY_NONE;                                //         校验位
  117.         param.u8cRxTriggerLevel  = DRVUART_FIFO_1BYTES;                                //         FIFO存储深度 1 字节
  118.         param.u8TimeOut                 = 0;                                                                //         FIFO超时设定
  119.         /* Set UART Configuration */
  120.         if(DrvUART_Open(UART_PORT0,¶m) != E_SUCCESS)                        //         串口开启、结构体整体赋值
  121.                 printf("UART0 open failed\n");                                                
  122.         /* u32Port -[in] UART Channel:  UART_PORT0 / UART_PORT1 /UART_PORT2        */
  123.         /* sParam  -[in] the struct parameter to configure UART                         */   

  124.         /* Enable Interrupt and install the call back function */
  125.         DrvUART_EnableInt(UART_PORT0, DRVUART_RDAINT,UART_INT_HANDLE);
  126.         /*u32Port                   -[in] UART Channel:  UART_PORT0 / UART_PORT1 / UART_PORT2                                               */
  127.         /*u32InterruptFlag -[in] DRVUART_LININT/DRVUART_WAKEUPINT/DRVUART_BUFERRINT/DRVUART_RLSINT                          */
  128.         /*                                                                                DRVUART_MOSINT/DRVUART_THREINT/DRVUART_RDAINT/DRVUART_TOUTINT          */
  129.         /*pfncallback      -[in] A function pointer for callback function                                                   */
  130. }

  131. int main (void)
  132. {
  133.         uint8_t test = 250;
  134.         uint8_t bOutChar[1]={0xFF};
  135.         uint16_t tmp;
  136.         
  137.         Init_System();
  138.         
  139.         Init_Uart();

  140.         DrvGPIO_Open(E_GPA,Run_Led, E_IO_OUTPUT);                                  //程序运行指示
  141.         DrvGPIO_ClrBit(E_GPA,Run_Led);

  142.         printf("\n");
  143.         printf("/*==========================\n");
  144.         printf("======菜农 %d 助学计划======\n",test);
  145.         printf("========NUC120助学板========\n");
  146.         printf("======程序参考Cube教程======\n");
  147.         printf("=======2010年03月17日=======\n");
  148.         printf("==========Uart0实验=========\n");
  149.         printf("===请输入任意字符开始测试!==\n");
  150.         printf("==========================*/\n");

  151.         printf("您输入的内容为:");

  152.     while(1)
  153.     {
  154.         tmp = comRtail;
  155.                 if(comRhead != tmp)
  156.                 {
  157.                         bOutChar[0] = comRbuf[comRhead];
  158.                         DrvUART_Write(UART_PORT0,bOutChar,1);
  159.                         /* u32Port                        -[in]   UART Channel:  UART_PORT0 / UART_PORT1 /UART_PORT2                */
  160.                         /* pu8RxBuf                     -[in]   Specify the buffer to send the data to transmission FIFO.        */
  161.                         /* u32ReadBytes            -[in]   Specify the byte number of data.                                           */
  162.                         comRhead = (comRhead == (RXBUFSIZE-1)) ? 0 : (comRhead+1);
  163.                         comRbytes--;
  164.                 }
  165.     }
  166. }
plc_avr 发表于 2011-3-18 08:01 | 显示全部楼层
MARK下,谢谢共享!
hotpower 发表于 2011-3-18 08:21 | 显示全部楼层
好!
俺在考虑250作文助学计划,与国军合作,奖励好文250
hotpower 发表于 2011-3-18 08:22 | 显示全部楼层
国军已到达深圳…农会的吴旭光教授恰好也在深圳公办,可先行接触
 楼主| Swallow_0322 发表于 2011-3-18 08:30 | 显示全部楼层
3# hotpower
那样的话Cortex M0的学习气氛会更浓,能避免造成新手闭门造车、老手闭门修炼的现象,支持!:victory:
hsbjb 发表于 2011-3-18 10:54 | 显示全部楼层
值得参考
 楼主| Swallow_0322 发表于 2011-3-19 16:08 | 显示全部楼层
多谢大叔送裤子一条!:)
因为最近工作有点忙,现在正在加班中。。。
所以更新下一贴比较慢。
 楼主| Swallow_0322 发表于 2011-3-20 07:41 | 显示全部楼层
O(∩_∩)O~ 一夜之间搬了个家,恭喜HOT大叔扩大菜园子规模!:lol
kinbing 发表于 2011-3-20 09:19 | 显示全部楼层
dbayj 发表于 2011-3-25 11:21 | 显示全部楼层
学习
cnshyl 发表于 2011-3-26 06:58 | 显示全部楼层
写的不错
weshiluwei6 发表于 2011-3-30 15:19 | 显示全部楼层
程序出现笑脸啊  恳请以后直接上传文件
 楼主| Swallow_0322 发表于 2011-3-31 15:29 | 显示全部楼层
12# weshiluwei6

呵呵! 已经不笑了,(*^__^*) 嘻嘻……
跑这来了:P
weshiluwei6 发表于 2011-4-14 09:01 | 显示全部楼层
13# Swallow_0322

请问下啊  为什么我下载了您的程序 该怎么查看结果呢 打开串口调试感觉没反应啊
 楼主| Swallow_0322 发表于 2011-4-14 11:32 | 显示全部楼层
14# weshiluwei6

你的软件环境及硬件环境是什么样子的?
weshiluwei6 发表于 2011-4-14 12:34 | 显示全部楼层
15# Swallow_0322

程序下载成功了 用的串口下载 说明串口没问题吧 然后用的HOTISP的 串口调试 可是一点反应也没有 程序运行的那个LED是亮的  我是水王:'(
 楼主| Swallow_0322 发表于 2011-4-14 14:35 | 显示全部楼层
16# weshiluwei6

现在没问题了吧?:P
weshiluwei6 发表于 2011-4-14 19:50 | 显示全部楼层
17# Swallow_0322

没了 真是万分感谢 支持下 顶贴
weshiluwei6 发表于 2011-4-14 19:51 | 显示全部楼层
再来一层楼:victory:
minghui2009 发表于 2011-4-14 20:59 | 显示全部楼层
:victory:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

121

主题

1393

帖子

4

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

121

主题

1393

帖子

4

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