📄 serial.c
字号:
/**************************************************************************************************
EDL RTOS Kernel
(c) Copyright 2005, Wu Jun
All Rights Reserved
For further information, please visit http://www.enjoydigitallife.com
* Description: None
* History:
Date Remarks
2005-01-06 Created initial version
2005-12-12 Finished the version 2.01
**************************************************************************************************/
#include "LPC2294.h"
#include "datatype.h"
#include "board.h"
#include "led.h"
#include "serial.h"
/**************************************************************************************************
* description: set baud rate, 1 stop bit, no check
**************************************************************************************************/
void uart0_init(U32 baudRate)
{
U32 Fdiv;
PINSEL0 = 0x00000005;
U0LCR = 0x83; // DLAB = 1,enable baud rate setting
Fdiv = (Fpclk / 16) / baudRate; // set baud rate
U0DLM = Fdiv / 256;
U0DLL = Fdiv % 256;
U0LCR = 0x03;
}
void uart0_sendByte(U8 data)
{
U0THR = data;
while( (U0LSR & 0x40) == 0 );
}
void uart0_sendWord(U32 data)
{
U8 i;
U32 buf = data;
for( i = 0; i < 4; i++ )
{
uart0_sendByte((U8)(( buf & 0xff000000 ) >> 24 ));
buf <<= 8;
}
}
void uart0_sendASCIIByte(U8 data)
{
U8 i,j,temp;
temp = data;
for( j = 0; j < 2; j++ )
{
i = ( U8 )( ( temp & 0xf0 ) >> 4);
if( i <= 9 )
{
U0THR = i + '0';
}
else
{
U0THR = i + 'A' - 10;
}
temp <<= 4;
while( (U0LSR & 0x40) == 0 );
}
}
void uart0_sendASCIIWord(U32 data)
{
U8 i;
U32 buf = data;
for( i = 0; i < 4; i++ )
{
uart0_sendASCIIByte((U8)(( buf & 0xff000000 ) >> 24 ));
buf <<= 8;
}
uart0_sendByte( 0x0d );
}
/*
#define UART0_REV_BUFFER_LENGTH 64
#define UART0_FIFO_LENGTH 16
U8 revBuffer[UART0_REV_BUFFER_LENGTH];
U8 startIndex = 0;
U8 endIndex = 0;
void __irq uart0_irq(void)
{
U8 revStatus;
U32 i;
while( !(U0IIR & 0x01) )
{
led_dispChar(U0IIR); //debug
for( i = 0; i < 1000; i++);
led_dispChar(0x00);
for( i = 0; i < 1000; i++);
switch (U0IIR & 0x0e)
{
case 0x02:
//led_dispChar(0xf0); //debug
for (i = 0; i < UART0_FIFO_LENGTH; i++)
{
if ( endIndex != startIndex )
{
U0THR = revBuffer[endIndex];
endIndex++;
endIndex %= UART0_REV_BUFFER_LENGTH;
}
else
{
U0IER &= (~0x02);
}
}
break;
case 0x04:
case 0x0c:
while( U0LSR & 0x01 )
{
revBuffer[startIndex] = U0RBR;
startIndex++;
startIndex %= UART0_REV_BUFFER_LENGTH;
}
for (i = 0; i < UART0_FIFO_LENGTH; i++)
{
if ( endIndex != startIndex )
{
U0THR = revBuffer[endIndex];
endIndex++;
endIndex %= UART0_REV_BUFFER_LENGTH;
}
else
{
break;
}
}
//while (!(U0LSR & 0x20));
//U0IER = 0x07;
break;
case 0x06:
revStatus = U0LSR;
break;
default :
break;
}
}
VICVectAddr = 0x00;
}
void uart0_init(U32 baudRate)
{
U16 Fdiv;
PINSEL0 = (PINSEL0 & 0xfffffff0) | 0x05;
U0LCR = 0x80;
Fdiv = (Fpclk / 16) / baudRate;
U0DLM = Fdiv / 256;
U0DLL = Fdiv % 256;
U0LCR = 0x03;
U0IER = 0x05;
U0FCR = 0x87;
VICVectCntl1 = ( 0x20 | 6 );
VICVectAddr1 = (U32)uart0_irq;
VICIntEnable = (U32)( 1 << 6 );
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -