uart_int.c

来自「ARMS3C44B0X的起动代码」· C语言 代码 · 共 70 行

C
70
字号
#include "uart.h"
#include "R44b0.h"

#define KEY_BUFLEN 100

static unsigned char keyBuf[KEY_BUFLEN];
volatile static int keyBufWrPt=0;

volatile static int keyBufRdPt=0;


static char *uart0TxStr;


char Uart_IntGetkey(void)
{


    if(keyBufRdPt==KEY_BUFLEN)
	keyBufRdPt=0;

    while(keyBufWrPt==keyBufRdPt);  //until FIFO is triggered
    return keyBuf[keyBufRdPt++];
}


void __irq Uart0_RxInt(void)
{
    rI_ISPC=BIT_URXD0;

    keyBuf[keyBufWrPt++]=RdURXH0();
    if(keyBufWrPt==KEY_BUFLEN)
		keyBufWrPt=0;
}

//unsigned int txcount=0;
void __irq Uart0_TxInt(void)
{
//    rI_ISPC=BIT_UTXD0;
//	txcount++;
    if(*uart0TxStr != '\0')
    {
	WrUTXH0(*uart0TxStr++);
	rI_ISPC=BIT_UTXD0;
    }
    else
    {
	rUCON0 &= 0x3f3;//workaround
	rI_ISPC=BIT_UTXD0;
	rINTMSK|=BIT_UTXD0;
    }
}

void Uart_TxEmpty(int ch)
{
    if(ch==0)
	while(!(rUTRSTAT0 & 0x4)); //wait until tx shifter is empty.
    else
    	while(!(rUTRSTAT1 & 0x4)); //wait until tx shifter is empty.
}

void Test_Uart0()
{
	int key;
    keyBufRdPt=keyBufWrPt=0;
    pISR_UTXD0=(unsigned)Uart0_TxInt;
    pISR_URXD0=(unsigned)Uart0_RxInt;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?