打印
[M051]

m0516串口接收中断里不能单个发送,至少发送两个!

[复制链接]
5073|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
abcdzhy|  楼主 | 2012-8-9 11:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
abcdzhy|  楼主 | 2012-8-9 11:21 | 只看该作者
附上程序,程序也是我根据例程改的
#include <stdio.h>
#include "M051Series.h"

#define PLLCON_SETTING      SYSCLK_PLLCON_50MHz_XTAL
#define PLL_CLOCK           50000000

/*---------------------------------------------------------------------------------------------------------*/
/* Define functions prototype                                                                              */
/*---------------------------------------------------------------------------------------------------------*/
int32_t main(void);

void Delay(int32_t time)
{
  while(time--)
  {
    ;
  }
}




void SYS_Init(void)
{
/*---------------------------------------------------------------------------------------------------------*/
/* Init System Clock                                                                                       */
/*---------------------------------------------------------------------------------------------------------*/

    /* Unlock protected registers */
    SYS_UnlockReg();

    /* Enable external 12MHz XTAL */
    SYSCLK->PWRCON |= SYSCLK_PWRCON_XTL12M_EN_Msk;

    SYSCLK->PLLCON = PLLCON_SETTING;

    /* Waiting for clock ready */
    SYS_WaitingForClockReady(SYSCLK_CLKSTATUS_PLL_STB_Msk | SYSCLK_CLKSTATUS_XTL12M_STB_Msk);

    /* Switch HCLK clock source to PLL */
    SYSCLK->CLKSEL0 = SYSCLK_CLKSEL0_HCLK_PLL;

    /* Enable IP clock */        
    SYSCLK->APBCLK = SYSCLK_APBCLK_UART0_EN_Msk | SYSCLK_APBCLK_UART1_EN_Msk;
                        
    /* IP clock source */
    SYSCLK->CLKSEL1 = SYSCLK_CLKSEL1_UART_PLL ;

    /* Update System Core Clock */
    /* User can use SystemCoreClockUpdate() to calculate PllClock, SystemCoreClock and CycylesPerUs automatically. */
    //SystemCoreClockUpdate();
    PllClock        = PLL_CLOCK;            // PLL
    SystemCoreClock = PLL_CLOCK / 1;        // HCLK
    CyclesPerUs     = PLL_CLOCK / 1000000;  // For SYS_SysTickDelay()

/*---------------------------------------------------------------------------------------------------------*/
/* Init I/O Multi-function                                                                                 */
/*---------------------------------------------------------------------------------------------------------*/
    /* Set P3 multi-function pins for UART0 RXD and TXD  */
    SYS->P3_MFP = SYS_MFP_P30_RXD0 | SYS_MFP_P31_TXD0;

    /* Set P1 multi-function pins for UART1 RXD and TXD  */
    SYS->P1_MFP = SYS_MFP_P12_RXD1 | SYS_MFP_P13_TXD1;

    /* Set P0 multi-function pins for UART1 RTS and CTS */
    SYS->P0_MFP = SYS_MFP_P01_RTS1 | SYS_MFP_P00_CTS1;

    /* Lock protected registers */
    SYS_LockReg();
}

void UART0_Init()
{
/*---------------------------------------------------------------------------------------------------------*/
/* Init UART                                                                                               */
/*---------------------------------------------------------------------------------------------------------*/
    UART0->BAUD = UART_BAUD_MODE2 | UART_BAUD_DIV_MODE2(PLL_CLOCK,115200);
   
    _UART_SET_DATA_FORMAT(UART0, UART_WORD_LEN_8 | UART_PARITY_NONE | UART_STOP_BIT_1);
}



/*---------------------------------------------------------------------------------------------------------*/
/* UART Test Sample                                                                                        */
/* Test Item                                                                                               */
/* It sends the received data to HyperTerminal.                                                            */
/*---------------------------------------------------------------------------------------------------------*/

/*---------------------------------------------------------------------------------------------------------*/
/* MAIN function                                                                                           */
/*---------------------------------------------------------------------------------------------------------*/


int main(void)
{
     /* Init System, IP clock and multi-function I/O */
    SYS_Init();
    /* Init UART0 for printf */
    UART0_Init();
    /* Init UART1 for testing */

/*---------------------------------------------------------------------------------------------------------*/
/* SAMPLE CODE                                                                                             */
/*---------------------------------------------------------------------------------------------------------*/
   // _UART_ENABLE_INT(UART0, (UART_IER_RDA_IEN_Msk | UART_IER_THRE_IEN_Msk | UART_IER_RTO_IEN_Msk));
   
    _UART_ENABLE_INT(UART0, UART_IER_RDA_IEN_Msk);
    NVIC_EnableIRQ(UART0_IRQn);
    while(1)
    {
       ;
    }
   

}

/*---------------------------------------------------------------------------------------------------------*/
/* ISR to handle UART Channel 0 interrupt event                                                            */
/*---------------------------------------------------------------------------------------------------------*/
void UART0_IRQHandler(void)
{
   uint8_t u8InChar=0xFF;
   uint32_t u32IntSts= UART0->ISR;

    if(u32IntSts & UART_ISR_RDA_INT_Msk)
    {   
        /* Get all the input characters */
        while(_UART_IS_RX_READY(UART0))
        {
         
          while(_UART_IS_RX_FULL(UART0))
          {
            ;
          }
            /* Get the character from UART Buffer */
           _UART_RECEIVEBYTE(UART0,u8InChar);           /* Rx trigger level is 1 byte*/
           _UART_SENDBYTE(UART0,u8InChar);
           _UART_WAIT_TX_EMPTY(UART0);
        }

    }
   
}

使用特权

评论回复
板凳
abcdzhy|  楼主 | 2012-8-10 11:26 | 只看该作者
这个问题就没人遇到过吗?难道只有我遇到,那位大虾可以帮忙看下,自己有m0的话也可以自己试下,先谢谢了!

使用特权

评论回复
地板
呆板书生| | 2012-8-10 20:03 | 只看该作者
楼主的运气真好,这样都能遇上,

我真的没有遇到过,包括051系列和nuc1xx系列,在uart0和uart1 ,我都写过不少串口程序,到目前为止还没有遇到这问题。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
296895536 + 1 求个NUC1xx串口程序。 能给我发给吗?29689.
5
abcdzhy|  楼主 | 2012-8-12 07:37 | 只看该作者
我就是用的上面的程序,也是从例程里面改的,确实存在这样的问题,如果你发送的不是一个是不会遇到这个问题的。实际项目中应该也没人会只发送一个,所以也不容易遇到。

使用特权

评论回复
6
我是土匪| | 2012-8-31 23:02 | 只看该作者
留名

使用特权

评论回复
7
菜鸟+新手| | 2012-9-14 12:11 | 只看该作者
你的串口调试工具配置的有问题吧?发送的时候选择十六进制的数

使用特权

评论回复
8
abcdzhy|  楼主 | 2012-9-27 22:05 | 只看该作者
串口调试工具肯定是没问题的,十六进制也是选了的。有时间了用cox调试试下

使用特权

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

本版积分规则

1

主题

9

帖子

1

粉丝