发新帖我要提问
12
返回列表
打印
[牛人杂谈]

M051_Series_BSP学习(01)

[复制链接]
楼主: 598330983
手机看帖
扫描二维码
随时随地手机跟帖
21
598330983|  楼主 | 2016-2-22 11:31 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
写BSP一定要按照该系统BSP的定义形式来写(BSP的编程过程大多数是在某一个成型的BSP模板上进行修改)。这样才能与上层OS保持正确的接口,良好的支持上层OS。太对了

使用特权

评论回复
22
zhuotuzi| | 2016-2-22 16:28 | 只看该作者
繁体编码让我头疼死了,原来是需要这么看,以为咋了呢。

使用特权

评论回复
23
wahahaheihei| | 2016-2-22 16:29 | 只看该作者
void UART0_Init(void)
{
    /*---------------------------------------------------------------------------------------------------------*/
    /* Init UART                                                                                               */
    /*---------------------------------------------------------------------------------------------------------*/
    /* Reset UART */
    SYS_ResetModule(UART0_RST);

    /* Configure UART0 and set UART0 Baudrate */
    UART_Open(UART0, 115200);
}
串口的使用真是简单,新唐的库函数做的真棒。

使用特权

评论回复
24
598330983|  楼主 | 2016-2-24 20:39 | 只看该作者
主要就是抚慰模块,然后配置参数并打开端口。

使用特权

评论回复
25
598330983|  楼主 | 2016-2-24 20:50 | 只看该作者
开漏输出使用的场效应管,使用时要加上拉电阻而已。

使用特权

评论回复
26
Bermanrep| | 2016-2-26 09:14 | 只看该作者
新唐单片机有没有专门配合的操作系统呢?

使用特权

评论回复
27
gejigeji521| | 2016-2-26 21:50 | 只看该作者
/*---------------------------------------------------------------------------------------------------------*/
/*                                                                                                         */
/* Copyright(c) 2010 Nuvoton Technology Corp. All rights reserved.                                         */
/*                                                                                                         */
/*---------------------------------------------------------------------------------------------------------*/

#include "Common.h"

#define RXBUFSIZE 64

/* Global variables */                                                                                       
volatile uint8_t comRbuf[RXBUFSIZE];
volatile uint16_t comRbytes = 0;                /* Available receiving bytes */
volatile uint16_t comRhead         = 0;
volatile uint16_t comRtail         = 0;
volatile int32_t g_bWait         = 1;

/*en:************************************************************************************
  Description:        UART0 ISR routine                                    
****************************************************************************************/
/*中:************************************************************************************
描述 :  UART0中断代码
****************************************************************************************/
void UART0_IRQHandler(void)
{
           uint8_t bInChar[1]={0xFF};
       
    if(UA0_ISR & RDA_INT)                              //中:检查是否接收中断//en:Check if receive interrupt
    {
        printf("\nInput:");
               
       
        while(UA0_ISR & RDA_IF)                        //中:检查接收到的数据是否有效//en:Check if received data avaliable
        {
            while (UA0_FSR & RX_EMPTY);                //中:等字符//en:Wait until an avaliable char present in RX FIFO
            bInChar[0] = UA0_RBR;                      //中:读取字符//en:Read the char

            printf("%c ", bInChar[0]);
                       
            if(bInChar[0] == '0')       
            {       
                g_bWait = 0;
            }
               
            if(comRbytes < RXBUFSIZE)                  //中:测缓冲区满否?//en:Check if buffer full
            {
                comRbuf[comRtail] = bInChar[0];        //中:字符队列//en:Enqueue the character
                comRtail = (comRtail == (RXBUFSIZE-1)) ? 0 : (comRtail+1);
                comRbytes++;
            }                       
        }
        printf("\nTransmission Test:");
    }
    else if(UA0_ISR & THRE_INT)                        //中:检查是否发送中断//en:Check if transmit interrupt
    {                     
        uint16_t tmp;
        tmp = comRtail;
        if(comRhead != tmp)
        {
            bInChar[0] = comRbuf[comRhead];
                       
            while((UA0_FSR&TX_FULL) != 0);             //中:发送FIFO满时等待//en:Wait until UART transmit FIFO is not full
            UA0_THR = bInChar[0];                      //中:发送一个字符//en:Transmit a char via UART
            comRhead = (comRhead == (RXBUFSIZE-1)) ? 0 : (comRhead+1);
            comRbytes--;
        }
    }
}

int32_t main()
{
    Un_Lock_Reg();                                     //中:解锁被保护的寄存器位,以便用户访问//en:Unlock protected register bits, so that user can access them
    PWRCON |= XTL12M_EN;                               //中:使能外部12MHz晶振//en:Enable external 12MHz crystal
    while((CLKSTATUS & XTL12M_STB) == 0);              //中:等12M晶振时钟稳定//en:Wait until external 12M crystal stable       
    CLKSEL0 = (CLKSEL0 & (~HCLK)) | HCLK_12M;          //中:选外部12MHz晶振为系统时钟//en:Select 12M as system clock
    Lock_Reg();                                        //中:重新锁被保护的寄存器位//en:Re-lock protected register bits   

    UART_Init();
    printf("\nUART Sample Demo. (Press '0' to exit)\n");


    UA0_IER        |= (RDA_IEN        | THRE_IEN | RLS_IEN);         //中:使能中断//en:Enable UART0 interrupt
    NVIC_ISER = UART0_INT;                             //中:使能NVIC UART0中断//en:Enable NVIC UART0 interrupt
    while(g_bWait);       

    UA0_IER        &= ~(RDA_IEN | THRE_IEN | RLS_IEN);        //中:禁中断//en:Disable UART0 interrupt
    NVIC_ICER = UART0_INT;                             //中:禁止NVIC UART0中断//en:Disable NVIC UART0 interrupt
    printf("\nUART Sample Demo End.\n");
       
    return 0;
}       


使用特权

评论回复
28
598330983|  楼主 | 2016-3-7 10:44 | 只看该作者
void GPIO_SetMode(GPIO_T *port, uint32_t u32PinMask, uint32_t u32Mode)
{
    uint32_t i;

    for(i = 0; i < GPIO_PIN_MAX; i++)
    {
        if(u32PinMask & (1 << i))
        {
            port->PMD = (port->PMD & ~(0x3 << (i << 1))) | (u32Mode << (i << 1));
        }
    }
}

使用特权

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

本版积分规则