[牛人杂谈] M051_Series_BSP学习(01)

[复制链接]
3500|27
 楼主| 598330983 发表于 2016-2-22 11:31 | 显示全部楼层
写BSP一定要按照该系统BSP的定义形式来写(BSP的编程过程大多数是在某一个成型的BSP模板上进行修改)。这样才能与上层OS保持正确的接口,良好的支持上层OS。太对了
zhuotuzi 发表于 2016-2-22 16:28 | 显示全部楼层
繁体编码让我头疼死了,原来是需要这么看,以为咋了呢。
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);
}
串口的使用真是简单,新唐的库函数做的真棒。
 楼主| 598330983 发表于 2016-2-24 20:39 | 显示全部楼层
主要就是抚慰模块,然后配置参数并打开端口。
 楼主| 598330983 发表于 2016-2-24 20:50 | 显示全部楼层
开漏输出使用的场效应管,使用时要加上拉电阻而已。
Bermanrep 发表于 2016-2-26 09:14 | 显示全部楼层
新唐单片机有没有专门配合的操作系统呢?
gejigeji521 发表于 2016-2-26 21:50 | 显示全部楼层
  1. /*---------------------------------------------------------------------------------------------------------*/
  2. /*                                                                                                         */
  3. /* Copyright(c) 2010 Nuvoton Technology Corp. All rights reserved.                                         */
  4. /*                                                                                                         */
  5. /*---------------------------------------------------------------------------------------------------------*/

  6. #include "Common.h"

  7. #define RXBUFSIZE 64

  8. /* Global variables */                                                                                       
  9. volatile uint8_t comRbuf[RXBUFSIZE];
  10. volatile uint16_t comRbytes = 0;                /* Available receiving bytes */
  11. volatile uint16_t comRhead         = 0;
  12. volatile uint16_t comRtail         = 0;
  13. volatile int32_t g_bWait         = 1;

  14. /*en:************************************************************************************
  15.   Description:        UART0 ISR routine                                    
  16. ****************************************************************************************/
  17. /*中:************************************************************************************
  18. 描述 :  UART0中断代码
  19. ****************************************************************************************/
  20. void UART0_IRQHandler(void)
  21. {
  22.            uint8_t bInChar[1]={0xFF};
  23.        
  24.     if(UA0_ISR & RDA_INT)                              //中:检查是否接收中断//en:Check if receive interrupt
  25.     {
  26.         printf("\nInput:");
  27.                
  28.        
  29.         while(UA0_ISR & RDA_IF)                        //中:检查接收到的数据是否有效//en:Check if received data avaliable
  30.         {
  31.             while (UA0_FSR & RX_EMPTY);                //中:等字符//en:Wait until an avaliable char present in RX FIFO
  32.             bInChar[0] = UA0_RBR;                      //中:读取字符//en:Read the char

  33.             printf("%c ", bInChar[0]);
  34.                        
  35.             if(bInChar[0] == '0')       
  36.             {       
  37.                 g_bWait = 0;
  38.             }
  39.                
  40.             if(comRbytes < RXBUFSIZE)                  //中:测缓冲区满否?//en:Check if buffer full
  41.             {
  42.                 comRbuf[comRtail] = bInChar[0];        //中:字符队列//en:Enqueue the character
  43.                 comRtail = (comRtail == (RXBUFSIZE-1)) ? 0 : (comRtail+1);
  44.                 comRbytes++;
  45.             }                       
  46.         }
  47.         printf("\nTransmission Test:");
  48.     }
  49.     else if(UA0_ISR & THRE_INT)                        //中:检查是否发送中断//en:Check if transmit interrupt
  50.     {                     
  51.         uint16_t tmp;
  52.         tmp = comRtail;
  53.         if(comRhead != tmp)
  54.         {
  55.             bInChar[0] = comRbuf[comRhead];
  56.                        
  57.             while((UA0_FSR&TX_FULL) != 0);             //中:发送FIFO满时等待//en:Wait until UART transmit FIFO is not full
  58.             UA0_THR = bInChar[0];                      //中:发送一个字符//en:Transmit a char via UART
  59.             comRhead = (comRhead == (RXBUFSIZE-1)) ? 0 : (comRhead+1);
  60.             comRbytes--;
  61.         }
  62.     }
  63. }

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

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


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

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


 楼主| 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));
        }
    }
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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