图片:
图片:
根据韦东山的开发手册做串口的实验,编译后出现Error : Undefined symbol PCLK (referred from 2440lib.0).
main.c 函数 :
#include <stdlib.h>
#include <string.h>
#include "option.h"
#include "2440addr.h"
#include "2440lib.h"
#include "2440slib.h"
#define TXD0READY (1<<2)
#define RXD0READY (1)
/*
* 初始化UART0
* 115200,8N1,无流控
*/
#define PCLK 50000000 // init.c中的clock_init函数设置PCLK为50MHz
#define UART_CLK PCLK // UART0的时钟源设为PCLK
#define UART_BAUD_RATE 115200 // 波特率
#define UART_BRD ((UART_CLK / (UART_BAUD_RATE * 16)) - 1)
void uart0_init(void)
{
rGPHCON |= 0xa0; // GPH2,GPH3用作TXD0,RXD0
rGPHUP = 0x0c; // GPH2,GPH3内部上拉
rULCON0 = 0x03; // 8N1(8个数据位,无较验,1个停止位)
rUCON0 = 0x05; // 查询方式,UART时钟源为PCLK
rUFCON0 = 0x00; // 不使用FIFO
rUMCON0 = 0x00; // 不使用流控
rUBRDIV0 = UART_BRD;
}
/*
* 发送一个字符
*/
void putc(unsigned char c)
{
/* 等待,直到发送缓冲区中的数据已经全部发送出去 */
while (!(rUTRSTAT0 & TXD0READY));
/* 向UTXH0寄存器中写入数据,UART即自动将它发送出去 */
rUTXH0 = c;
}
/*
* 接收字符
*/
unsigned char getc(void)
{
/* 等待,直到接收缓冲区中的有数据 */
while (!(rUTRSTAT0 & RXD0READY));
/* 直接读取URXH0寄存器,即可获得接收到的数据 */
return rURXH0;
}
/*
* 判断一个字符是否数字
*/
int isDigit(unsigned char c)
{
if (c >= '0' && c <= '9')
return 1;
else
return 0;
}
/*
* 判断一个字符是否英文字母
*/
int isLetter(unsigned char c)
{
if (c >= 'a' && c <= 'z')
return 1;
else if (c >= 'A' && c <= 'Z')
return 1;
else
return 0;
}
int Main(void)
{
U8 c;
uart0_init(); // 波特率115200,8N1(8个数据位,无校验位,1个停止位)
while(1)
{
// 从串口接收数据后,加1后输出
c = getc();
if (isDigit(c) || isLetter(c))
putc(c+1);
}
return 0;
}
不知是怎么回事,求教?