打印
[新手园地]

HOT大叔NUC120助学板第二贴----安个监视器

[复制链接]
7567|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Swallow_0322|  楼主 | 2011-3-18 07:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Swallow_0322 于 2011-3-30 16:39 编辑
 
/*
    借着HOT大叔助学的东风,献丑第二贴,给你的程序先装个监视器,O(∩_∩)O~
UART练习。废话不说上源码,希望大家不吝批评赐教!
    按照第一帖建立工程及配置工程即可!
    下载可参考菜农助学板活动-第0课板子初次使用!
    本程序参考新唐库及神的指导教程!
*/

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

#define RXBUFSIZE 100

volatile uint16_t comRhead         = 0;
volatile uint16_t comRtail         = 0;
volatile uint8_t g_bWait         = FALSE;
uint8_t comRbuf[100];
uint32_t comRbytes = 0;        
uint8_t  Run_Led = 4;                                //2----LED1  3----LED2          4----LED3  5----LED4

/***************
**  函数声明  **
***************/
void Init_System (void);
void Init_Uart (void);
void UART_INT_HANDLE(uint32_t u32IntStatus);


/*****************************
** Name:      UART_INT_HANDLE
** Function:  UART Callback function
** Input:     u32IntStatus
** OutPut:    None
** Data:      2011-03-17
** Note:      
****************************/
void UART_INT_HANDLE(uint32_t u32IntStatus)
{

        uint8_t bInChar[1]={0xFF};

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

                        /* Check if buffer full */
                        if(comRbytes < RXBUFSIZE)
                        {
                                /* Enqueue the character */
                                comRbuf[comRtail] = bInChar[0];
                                comRtail = (comRtail == (RXBUFSIZE-1)) ? 0 : (comRtail+1);
                                comRbytes++;
                        }                                                
                }
        }
}

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

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

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

/*****************************
** Name:      Init_Uart
** Function:  UART初始化函数
** Input:      None
** OutPut:     None
** Data:       2011-03-17
** Note:      
****************************/
void Init_Uart(void)
{
        STR_UART_T param;
        /*
        声明 UART设置的结构体 位于DRVUART.H
        结构体如下
        typedef struct DRVUART_STRUCT
        {
                uint32_t            u32BaudRate;                        
                E_DATABITS_SETTINS  u8cDataBits;                        
                E_STOPBITS_SETTINS  u8cStopBits;                        
                E_PARITY_SETTINS         u8cParity;                                 
                E_FIFO_SETTINGS     u8cRxTriggerLevel;                 
                uint8_t             u8TimeOut ;                                 
      }STR_UART_T;
        */
        DrvSYS_SelectIPClockSource(E_SYS_UART_CLKSRC,0);                    //使能UART时钟
        //SYSCLK->CLKSEL1.UART_S = 0;                //UART时钟源选择. 00 =外部12MHz 晶振 01 = PLL 1x =内部 22MHz 振荡器

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

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

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

int main (void)
{
        uint8_t test = 250;
        uint8_t bOutChar[1]={0xFF};
        uint16_t tmp;
        
        Init_System();
        
        Init_Uart();

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

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

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

    while(1)
    {
        tmp = comRtail;
                if(comRhead != tmp)
                {
                        bOutChar[0] = comRbuf[comRhead];
                        DrvUART_Write(UART_PORT0,bOutChar,1);
                        /* u32Port                        -[in]   UART Channel:  UART_PORT0 / UART_PORT1 /UART_PORT2                */
                        /* pu8RxBuf                     -[in]   Specify the buffer to send the data to transmission FIFO.        */
                        /* u32ReadBytes            -[in]   Specify the byte number of data.                                           */
                        comRhead = (comRhead == (RXBUFSIZE-1)) ? 0 : (comRhead+1);
                        comRbytes--;
                }
    }
}

相关帖子

沙发
plc_avr| | 2011-3-18 08:01 | 只看该作者
MARK下,谢谢共享!

使用特权

评论回复
板凳
hotpower| | 2011-3-18 08:21 | 只看该作者
好!
俺在考虑250作文助学计划,与国军合作,奖励好文250

使用特权

评论回复
地板
hotpower| | 2011-3-18 08:22 | 只看该作者
国军已到达深圳…农会的吴旭光教授恰好也在深圳公办,可先行接触

使用特权

评论回复
5
Swallow_0322|  楼主 | 2011-3-18 08:30 | 只看该作者
3# hotpower
那样的话Cortex M0的学习气氛会更浓,能避免造成新手闭门造车、老手闭门修炼的现象,支持!:victory:

使用特权

评论回复
6
hsbjb| | 2011-3-18 10:54 | 只看该作者
值得参考

使用特权

评论回复
7
Swallow_0322|  楼主 | 2011-3-19 16:08 | 只看该作者
多谢大叔送裤子一条!:)
因为最近工作有点忙,现在正在加班中。。。
所以更新下一贴比较慢。

使用特权

评论回复
8
Swallow_0322|  楼主 | 2011-3-20 07:41 | 只看该作者
O(∩_∩)O~ 一夜之间搬了个家,恭喜HOT大叔扩大菜园子规模!:lol

使用特权

评论回复
9
kinbing| | 2011-3-20 09:19 | 只看该作者

使用特权

评论回复
10
dbayj| | 2011-3-25 11:21 | 只看该作者
学习

使用特权

评论回复
11
cnshyl| | 2011-3-26 06:58 | 只看该作者
写的不错

使用特权

评论回复
12
weshiluwei6| | 2011-3-30 15:19 | 只看该作者
程序出现笑脸啊  恳请以后直接上传文件

使用特权

评论回复
13
Swallow_0322|  楼主 | 2011-3-31 15:29 | 只看该作者
12# weshiluwei6

呵呵! 已经不笑了,(*^__^*) 嘻嘻……
跑这来了:P

使用特权

评论回复
14
weshiluwei6| | 2011-4-14 09:01 | 只看该作者
13# Swallow_0322

请问下啊  为什么我下载了您的程序 该怎么查看结果呢 打开串口调试感觉没反应啊

使用特权

评论回复
15
Swallow_0322|  楼主 | 2011-4-14 11:32 | 只看该作者
14# weshiluwei6

你的软件环境及硬件环境是什么样子的?

使用特权

评论回复
16
weshiluwei6| | 2011-4-14 12:34 | 只看该作者
15# Swallow_0322

程序下载成功了 用的串口下载 说明串口没问题吧 然后用的HOTISP的 串口调试 可是一点反应也没有 程序运行的那个LED是亮的  我是水王:'(

使用特权

评论回复
17
Swallow_0322|  楼主 | 2011-4-14 14:35 | 只看该作者
16# weshiluwei6

现在没问题了吧?:P

使用特权

评论回复
18
weshiluwei6| | 2011-4-14 19:50 | 只看该作者
17# Swallow_0322

没了 真是万分感谢 支持下 顶贴

使用特权

评论回复
19
weshiluwei6| | 2011-4-14 19:51 | 只看该作者
再来一层楼:victory:

使用特权

评论回复
20
minghui2009| | 2011-4-14 20:59 | 只看该作者
:victory:

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

121

主题

1393

帖子

4

粉丝