-1

我正在使用我的 uC LPC2478。我正在研究功能UART0。但我需要制作功能UART0。我不知道中断,如何使用!

我尝试发送一个长字符串,它应该接收一个长字符串。但它不起作用。但是我需要写函数__irq void isr_UART0 (void)???

    >     void initUART0 (void)
    >     {
    >       PCONP   |= (1 << 3);                 /* Enable UART0 power                */
    >     
    >       PINSEL0 &= ~0x000000F0;
    >       PINSEL0 |= 0x00000050;
    >     
    >       U0FDR    = 0;                          /* Fractional divider not used       */
    >       U0LCR = 0x83;                       /* 8 bits, no Parity, 1 Stop bit       */
    >       U0DLL = 10;                          /* 115200 Baud Rate @ 12MHz PCLK Clock */
    >     
    >       U0DLM = 0;
    >       U0LCR = 0x03;                       /* DLAB = 0                            */
    >       
    >       U0IER = 0;
    >       
    >       VICVectAddr6 = (U32)isr_UART0;     /* Set Interrupt Vector                */
    >       VICVectCntl6 = 15;                   /* use it for UART1 Interrupt          */
    >       VICIntEnable  = (1  << 6);          /* Enable Interrupt                    */
    >       
    >       U0IER = 0x03;
    >     }
    > 
    >     void sendToUART0 (char *data, int len)
    >     {
    >       int i;
    >       
    >       while (!(U0LSR & (1 << 5)));
    >       for (i = 0; i < len; i++)
    >       {
    >           U0THR = *data;
    >           data++;
    >       }
    >     }
    > 
    >     void readDataAtUART0 (char *ch) { 
    >       //while (!(U0LSR & 0x01));  
    >        while (!(U0LSR & (1 << 0))); 
    >        *ch = U0RBR; 
    >     }
    > 
    >     /* UART1 receive ISR
    >     ******************************************************** */
    >     __irq void isr_UART0 (void) {     
    >       // readDataAtUART0();
    > 
    >               // read and assign the received data 
           VICVectAddr = 0;              /* Acknowledge Interrupt   */ 
    >      }
4

1 回答 1

0

“但它不起作用”对您的问题的描述非常糟糕,所以无论如何都是-1。

'readDataAtUART0();' 与 'void readDataAtUART0 (char *ch)' 的签名不匹配,因此此代码将无法编译。中断处理程序没有进程或线程上下文,因此您必须使用至少一个全局变量来允许处理程序进行通信 - 在您的情况下,是一个数组指针。

TX 中断有点尴尬,因为 U0THR 可能需要使用要发送的第一个字符“启动”。这可能很尴尬,需要禁用 tx 中断以检查 U0THR 是否已清空上一个缓冲区内容的最后一个字符。

只需让代码编译,然后让 rx 处理程序首先工作。

于 2014-12-12T13:56:23.957 回答