📄 2410lib.c
字号:
ClkPara.pclk = 4;
ClkPara.sclk = 1;
set_pll();
}
/***************************************************************************
Function name: GetCpuClock
Parameter : void
Description : 获得系统的主频
Return : 返回系统的主频
Argument :
Autor & date :
****************************************************************************/
U32 GetCpuClock(void)
{
return ClkPara.freq;
}
/***************************************************************************
Function name: GetMasterClock
Parameter : void
Description : 获得系统的PCLK频率
Return : 返回系统的PCLK频率
Argument :
Autor & date :
****************************************************************************/
U32 GetMasterClock(void)
{
U32 clk;
clk = GetCpuClock();
if(rCLKDIVN&2)
clk >>= 1;
if(rCLKDIVN&1)
clk >>= 1;
return clk;
}
/***************************************************************************
Function name: Delay
Parameter : ms : 延迟时间大小的参数
Description : 延迟函数
Return : void
Argument : 以ms为延时单位
Autor & date :
****************************************************************************/
void Delay(U32 ms)
{
U16 i;
i = rTCNTB4>>1; //1000us/2
rTCON &= ~(1<<20);
rTCON |= (1<<20); //停止再启动,重装初值,减计数
while(ms--) {
while(rTCNTO4>=i);
while(rTCNTO4<i);
}
}
/***************************************************************************************************/
/************************下面是串口通讯相关函数*****************************************************/
/***************************************************************************************************/
/***************************************************************************
Function name: SerialSwitch
Parameter : port : 串口选择参数,0:串口1 1:串口2
Description : 进行串口切换
Return : 返回串口切换的参数,是串口1还是串口2
Argument :
Autor & date :
****************************************************************************/
static U16 SerialPortSel;
U16 SerialSwitch(U16 port)
{
#ifdef SERIAL_PORTS_SWITCH
// U16 old_sel = SerialPortSel;
SerialPortSel = port?1:0;
#else
SerialPortSel = 0;
#endif
return SerialPortSel;
}
/***************************************************************************
Function name: SerialChgBaud
Parameter : baud : 串口波特率参数
Description : 设置串口的波特率
Return : void
Argument : 常用串口波特率范围:2400,4800,9600,19200,38400,115200等
Autor & date :
****************************************************************************/
void SerialChgBaud(U32 baud)
{
U32 mclk = GetMasterClock();
rUFCON0 = 0x0; //FIFO disable
rUFCON1 = 0x0;
rUMCON0 = 0x0;
rUMCON1 = 0x0;
//UART0
// rULCON0 = 0x7; //Normal,No parity,2 stop,8 bit
rULCON0 = 0x3; //Normal,No parity,1 stop,8 bit
rUCON0 = 0x245; //rx=edge,tx=level,disable timeout int.,enable rx error int.,normal,interrupt or polling
rUBRDIV0 = ((int)(mclk/16./baud + 0.5) -1);
//UART1
// rULCON1 = 0x7; //Normal,No parity,2 stop,8 bit
rULCON1 = 0x3;
rUCON1 = 0x245;
rUBRDIV1 = ((int)(mclk/16./baud + 0.5) -1);
}
/***************************************************************************
Function name: SerialTxChar
Parameter : data :要发送的数据
Description : 主要进行串口发送
Return : void
Argument : 通过SerialPortSel变量来选择是哪个串口发送数据
Autor & date :
****************************************************************************/
void SerialTxChar(char data)
{
if(SerialPortSel) {
if(data=='\n') {
while(!(rUTRSTAT1 & 0x4));
//Delay(1); //because the slow response of hyper_terminal
WrUTXH1('\r');
}
while(!(rUTRSTAT1 & 0x4)); //Wait until THR is empty.
// Delay(1);
WrUTXH1(data);
} else {
if(data=='\n') {
while(!(rUTRSTAT0 & 0x4));
//Delay(1); //because the slow response of hyper_terminal
WrUTXH0('\r');
}
while(!(rUTRSTAT0 & 0x4)); //Wait until THR is empty.
WrUTXH0(data);
}
}
/***************************************************************************
Function name: SerialRxReady
Parameter : void
Description : 检测串口接收缓冲区是否有数据
Return : 返回UTRSTATn[0]的状态
Argument : 不管什么时候,只要接收缓冲寄存器包含有效数据,UTRSTATn[0]就
自动被设置为1,否则为0
Autor & date :
****************************************************************************/
int SerialRxReady(void)
{
if(SerialPortSel)
return (rUTRSTAT1 & 0x1); //Receive data ready
else
return (rUTRSTAT0 & 0x1); //Receive data ready
}
/***************************************************************************
Function name: SerialRxKey
Parameter : void
Description : 检测串口接收缓冲区是否有数据,有的话,返回缓冲区的数据
Return : 返回接收缓冲区的数据或则0
Argument : 不管什么时候,只要接收缓冲寄存器包含有效数据,UTRSTATn[0]就
自动被设置为1,否则为0
Autor & date :
****************************************************************************/
char SerialRxKey(void)
{
if(SerialPortSel) {
if((rUTRSTAT1 & 0x1)) //Receive data ready
return RdURXH1();
} else {
if((rUTRSTAT0 & 0x1)) //Receive data ready
return RdURXH0();
}
return 0;
}
/***************************************************************************
Function name: SerialTxString
Parameter : *s : 要发送的字符串变量
Description : 向串口发送字符串
Return : void
Argument :
Autor & date :
****************************************************************************/
void SerialTxString(char *s)
{
while(*s)
SerialTxChar(*s++);
}
/***************************************************************************
Function name: putch
Parameter : ch : 要发送的数据
Description : 向串口发送一个数据
Return : void
Argument :
Autor & date :
****************************************************************************/
void putch(char ch)
{
SerialTxChar(ch);
}
/***************************************************************************
Function name: puts
Parameter : *str : 要发送的字符串指针变量
Description : 向串口发送字符串
Return : void
Argument :
Autor & date :
****************************************************************************/
void puts(char *str)
{
SerialTxString(str);
}
/***************************************************************************
Function name: kbhit
Parameter : void
Description : 检测串口接收缓冲区是否有数据
Return : 有,返回1,否返回0
Argument :
Autor & date :
****************************************************************************/
int kbhit(void)
{
if(SerialRxReady())
return 1;
return 0;
}
/***************************************************************************
Function name: printf
Parameter : *fmt : 数据显示的格式
Description : 根据提供的格式显示变量的数值
Return : void
Argument : 调用了ADS的库函数
Autor & date :
****************************************************************************/
//If you don't use vsprintf(), the code size is reduced very much.
typedef int *__va_list[1];
int vsprintf(char * /*s*/, const char * /*format*/, __va_list /*arg*/);
void printf(char *fmt, ...)
{
va_list ap;
char string[1024];
va_start(ap,fmt);
vsprintf(string,fmt,ap);
puts(string);
va_end(ap);
}
/***************************************************************************
Function name: getkey
Parameter : void
Description :
Return : 如果串口接收缓冲区有数据,就返回数据,否则返回0
Argument :
Autor & date :
****************************************************************************/
int getkey(void)
{
int c;
c = SerialRxKey();
if(c)
return c;
return 0;
// return GetScanKey();
}
/***************************************************************************
Function name: getch
Parameter : void
Description : 等待从串口接收一个数据,否则一直循环
Return : 返回接收到的数据
Argument :
Autor & date :
****************************************************************************/
char getch(void)
{
int c;
while(1) {
c = getkey();
if(c) {
//printf("get key!\n");
return c;
}
}
//return SerialRxChar();
}
/***************************************************************************
Function name: memcpy
Parameter : *s1:目的地址 *s2:源地址 n:要拷贝的数据的长度
Description : 将长度为n的数据拷贝从源地址拷贝到目的地址
Return : void
Argument :
Autor & date :
****************************************************************************/
void memcpy(void *s1, const void *s2, int n)
{
int i;
for (i = 0; i < n; i++)
((char *)(s1))[i] = ((const char *)(s2))[i];
}
/**************************************************************************/
/***************************************************************************
Function name: strlen
Parameter : *s:字符串指针
Description : 计算字符串的长度
Return : void
Argument :
Autor & date :
****************************************************************************/
int strlen(const char *s)
{
int i = 0;
for(; *s; s++)
i++;
return i;
}
/***************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -