?? 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 + -