- 论坛徽章:
- 0
|
本帖最后由 shuimu_1 于 2013-07-16 10:58 编辑
大家好!
小弟最近在做uboot下的TL16C752B串口驱动开发,是基于mpc8313e的
我首先在CodeWarrior(飞思卡尔的一个开发平台)下面通过仿真器调试串口,代码如下
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
#include <stdio.h>
//#include <malloc.h>
#define hong short
#define BSC_UARTB 0x01
#define BUAD_9K6_L 0x90 //22.1184M changed by asky
#define BUAD_9K6_H 0x00
#define UARTINT_RHR 0x01 /*set rcv int*/
#define UARTINT_THR 0x02 /*set send int*/
#define BSC_UARTA_ADDR 0xfa000000 //base_addr changed by asky
#define BSC_UARTB_ADDR 0xfa000080
#define START 0x00
#define MAX_UART_BUF_NUM 60
#define TX_ENABLE 0x08
#define RX_ENABLE 0x0B
//////////////////////////////////////////////////
#define UART_RHR_THR 0x00 //enum default add 1
#define UART_IER 0x02
#define UART_FCR_IIR 0x04
#define UART_LCR 0x06
#define UART_MCR 0x08
#define UART_LSR 0x0a
#define UART_MSR 0x0c
#define UART_SPR 0x0e
////////////////////////////////
#define UART_DLL 0x00
#define UART_DLH 0x02
#define UART_EFR 0x04
#define UART_NULL 0x06
#define UART_XON1 0x08
#define UART_XON2 0x0a
#define UART_XOFF1_TCR 0x0c
#define UART_XOFF2_TLR_FIFORDY 0x0e
//////////////////////////////////////////////////
asm void system_call();
asm void system_call()
{
nofralloc
sc
blr
}
unsigned char BSC_TL16C752B_WRITE_REG(unsigned char channal,unsigned char reg,unsigned int val);
unsigned char BSC_TL16C752B_READ_REG(unsigned char channal,unsigned char reg);
int TL16C752B_init ();
void TL16C752B_putc (unsigned int c);
char TL16C752B_getc ();
int TL16C752B_tstc ();
int TL16C752B_reinit ();
////////////////////////////////
// tl16c752b init //
////////////////////////////////
int TL16C752B_init()
{
unsigned char temp,temp1,temp2;
//baud set
BSC_TL16C752B_WRITE_REG(BSC_UARTB, UART_LCR, 0x80); //divisor_enable 8bit_data 1bit_stop
BSC_TL16C752B_WRITE_REG(BSC_UARTB, UART_DLL, BUAD_9K6_L); //baud 9600
BSC_TL16C752B_WRITE_REG(BSC_UARTB, UART_DLH, BUAD_9K6_H);
BSC_TL16C752B_WRITE_REG(BSC_UARTB, UART_LCR, 0x03); //divisor_disable 8bit_data 1bit_stop
BSC_TL16C752B_WRITE_REG(BSC_UARTB, UART_FCR_IIR, 0x07); //Enable the transmit and receive FIFOs
BSC_TL16C752B_WRITE_REG(BSC_UARTB, UART_MCR, RX_ENABLE); // RTS#= 1 DE= RE#=0 rcv
BSC_TL16C752B_WRITE_REG(BSC_UARTB, UART_IER, UARTINT_RHR);
return 0;
}
void TL16C752B_putc (unsigned int c)
{
while (( BSC_TL16C752B_READ_REG(BSC_UARTB, UART_LSR) & 0x20) == 0);
BSC_TL16C752B_WRITE_REG(BSC_UARTB, UARTINT_THR, c);
}
void main()
{
char i=0;
long j=0;
hong k[100];
printf("Welcome to CodeWarrior!\r\n" ;
system_call(); //generate a system call exception to demonstrate the ISR
TL16C752B_init();
while(1)
{
for(i=0;i<100
{
i++;
TL16C752B_putc(i);
}
}
}
//////////////////////////////////////////////////////////////////////////////////////
我是利用红色部分的代码来通过串口向外发送数据的,这有问题吗?
为什么串口芯片上面的TX口没有电平变化呢?
我该怎么做呢?
求各位大牛帮忙!
|
|