📄 uart.c
字号:
/*
;***********************************************************************
;* 北京达盛科技有限公司
;* 研 发 部
;*
;* http://www.techshine.com
;*
;*--------------------------------------------- 文件信息 ---------------
;*
;* 文件名称 : uart.C
;* 文件功能 : 该文件为测试uart的测试程序,CPU=TMS320VC5402LF2407
;* 接口说明:
;*-------------------------------------------- 最新版本信息 ------------
;* 文件作者 : 迟利刚
;* 创建日期 : 2005/01/18
;* 版本声明 : v1.0.0
;*-----------------------------------------------------------------------
//------------------头文件--------------------------------------
/*******************************************************************/
#include "exp4_2407.h"
/*******************************************************************/
//----------------------------------------------------------
// --------------- 宏定义 ---------------------------------/
//----------------------------------------------------------
#define UCHAR unsigned char
#define UINT16 unsigned int
#define UINT32 unsigned long
#define TRUE 1
#define FALSE 0
//---------------------------------------------------------
/* 端口定义 */
//---------------------------------------------------------
ioport UINT16 port8001; //定义输出io端口为0x8001;
//----------------------------------------------------------
/* 全局变量定义 */
//---------------------------------------------------------
char send_buff = 0x00; //发送缓冲
char rece_buff = 0x00; //接收缓冲
UINT16 show = 0x00aa;
/*
**********************************************************************
*************** 所使用的函数原型 *****************
**********************************************************************
*/
void cpu_init(void); //初始化CPU
void sci_init(void); //初始化SCI设置寄存器
interrupt void PHANTOM(void); //伪中断程序
interrupt void int1(void); //中断1中断子程序
void Delay(UINT16 numbers); //长延迟
//-------------------------------------------------------------------
/*
************************************************************************
*********************** 函数定义 ******************
************************************************************************
*/
//--------------------------------------------------------------------
// 函数名称 : void cpu_init(void)
// 函数说明 : 初始化CPU
// 输入参数 : 无
// 输出参数 : 无
//--------------------------------------------------------------------
void cpu_init()
{
asm(" nop ");
asm(" nop ");
asm(" nop ");
asm(" setc INTM"); //禁止所有中断 ST0.9=INTM
asm(" clrc SXM"); //抑制符号位扩展
asm(" clrc OVM"); //累加器中结果正常溢出
asm(" clrc CNF"); //配置 B0为数据储存器
/*** Configure the System Control and Status registers ***/
* SCSR1=0x00FD; //配置时钟锁相为4倍频CLKOUT=4*10MHZ=40MHZ,MAX CPU freq
/*
bit 15 0: reserved
bit 14 0: CLKOUT = CPUCLK
bit 13-12 00: IDLE1 selected for low-power mode when execute IDLE instruction
bit 11-9 000: PLL x1 mode
bit 8 0: reserved
bit 7 1: 1 = enable ADC module clock
bit 6 1: 1 = enable SCI module clock
bit 5 1: 1 = enable SPI module clock
bit 4 1: 1 = enable CAN module clock
bit 3 1: 1 = enable EVB module clock
bit 2 1: 1 = enable EVA module clock
bit 1 0: reserved
bit 0 1: clear the ILLADR bit
*/
*SCSR2 = (*SCSR2 | 0x000B) & 0x000F;
/*
bit 15-7 0's: reserved
bit 6 0: Input Qualifier Clocks=5 clock
bit 5 0: D'ont write this bit.allows user to disable WD through the WDDIS bit in the WDCR.
bit 4 0: XMIF_HI-Z, 0=normal mode, 1=Hi-Z'd
bit 3 1: disable the boot ROM, enable the FLASH
bit 2 no change MP/MC* bit reflects state of MP/MC* pin
bit 1-0 11: 11 = SARAM mapped to prog and data
*/
/*** Disable the watchdog timer ***/
* WDCR=0x00EF; //禁止看门狗
/*
bits 15-8 0's: reserved
bit 7 1: clear WD flag
bit 6 1: disable the dog
bit 5-3 101: must be written as 101
bit 2-0 111: WDCLK divider = 64 WDCLK= CLKOUT/512
*/
/*** Setup external memory interface for LF2407 ***/
WSGR = 0x001F;
/*
bit 15-11 0's: reserved
bit 10-9 00: bus visibility off
bit 8-6 111: 7 wait-state for I/O space
bit 5-3 111: 7 wait-state for data space
bit 2-0 111: 7 wait state for program space
*/
/*** Setup shared I/O pins ***/
*MCRA = 0x0000; /* group A pins */
/*
bit 15 0: 0=IOPB7, 1=TCLKINA
bit 14 0: 0=IOPB6, 1=TDIRA
bit 13 0: 0=IOPB5, 1=T2PWM/T2CMP
bit 12 0: 0=IOPB4, 1=T1PWM/T1CMP
bit 11 0: 0=IOPB3, 1=PWM6
bit 10 0: 0=IOPB2, 1=PWM5
bit 9 0: 0=IOPB1, 1=PWM4
bit 8 0: 0=IOPB0, 1=PWM3
bit 7 0: 0=IOPA7, 1=PWM2
bit 6 0: 0=IOPA6, 1=PWM1
bit 5 0: 0=IOPA5, 1=CAP3
bit 4 0: 0=IOPA4, 1=CAP2/QEP2
bit 3 0: 0=IOPA3, 1=CAP1/QEP1
bit 2 0: 0=IOPA2, 1=XINT1
bit 1 0: 0=IOPA1, 1=SCIRXD
bit 0 0: 0=IOPA0, 1=SCITXD
*/
*MCRB = 0xFE03; /* group B pins */
/*
bit 15 1: 0=reserved, 1=TMS2 (always write as 1)
bit 14 1: 0=reserved, 1=TMS (always write as 1)
bit 13 1: 0=reserved, 1=TD0 (always write as 1)
bit 12 1: 0=reserved, 1=TDI (always write as 1)
bit 11 1: 0=reserved, 1=TCK (always write as 1)
bit 10 1: 0=reserved, 1=EMU1 (always write as 1)
bit 9 1: 0=reserved, 1=EMU0 (always write as 1)
bit 8 0: 0=IOPD0, 1=XINT2/ADCSOC
bit 7 0: 0=IOPC7, 1=CANRX
bit 6 0: 0=IOPC6, 1=CANTX
bit 5 0: 0=IOPC5, 1=SPISTE
bit 4 0: 0=IOPC4, 1=SPICLK
bit 3 0: 0=IOPC3, 1=SPISOMI
bit 2 0: 0=IOPC2, 1=SPISIMO
bit 1 1: 0=IOPC1, 1=BIO*
bit 0 1: 0=IOPC0, 1=W/R*
*/
*MCRC = 0x0001; /* group C pins */
/*
bit 15 0: reserved
bit 14 0: 0=IOPF6, 1=IOPF6
bit 13 0: 0=IOPF5, 1=TCLKINB
bit 12 0: 0=IOPF4, 1=TDIRB
bit 11 0: 0=IOPF3, 1=T4PWM/T4CMP
bit 10 0: 0=IOPF2, 1=T3PWM/T3CMP
bit 9 0: 0=IOPF1, 1=CAP6
bit 8 0: 0=IOPF0, 1=CAP5/QEP4
bit 7 0: 0=IOPE7, 1=CAP4/QEP3
bit 6 0: 0=IOPE6, 1=PWM12
bit 5 0: 0=IOPE5, 1=PWM11
bit 4 0: 0=IOPE4, 1=PWM10
bit 3 0: 0=IOPE3, 1=PWM9
bit 2 0: 0=IOPE2, 1=PWM8
bit 1 0: 0=IOPE1, 1=PWM7
bit 0 1: 0=IOPE0, 1=CLKOUT
*/
/*** Configure IOPA pin as an INPUT ***/
*PADATDIR = *PADATDIR & 0x00FF;
/*** Configure IOPB pin as an INPUT ***/
*PBDATDIR = *PBDATDIR & 0x00FF;
/*** Configure IOPC pin as an INPUT ***/
*PCDATDIR = *PCDATDIR & 0x00FF;
/*** Configure IOPD pin as an INPUT ***/
*PDDATDIR = *PDDATDIR & 0xFEFF;
/*** Configure IOPE pin as an INPUT ***/
*PEDATDIR = *PEDATDIR & 0x00FF;
/*** Configure IOPF pin as an INPUT ***/
*PFDATDIR = *PFDATDIR & 0x7FFF;
/*** Setup timers 1 and 2, and the PWM configuration ***/
*T1CON = 0x0000; /* disable timer 1 */
*T2CON = 0x0000; /* disable timer 2 */
*GPTCONA = 0x0000; /* configure GPTCONA */
*GPTCONB = 0x0000; /* configure GPTCONB */
/*
bit 15 0: reserved
bit 14 0: T2STAT, read-only
bit 13 0: T1STAT, read-only
bit 12-11 00: reserved
bit 10-9 00: T2TOADC, 00 = no timerX event starts ADC
bit 8-7 00: T1TOADC, 00 = no timerX event starts ADC
bit 6 0: TCOMPOE, 0 = Hi-z all timer compare outputs
bit 5-4 00: reserved
bit 3-2 00: TXPIN, 00 = forced low
bit 1-0 00: TXPIN, 00 = forced low
*/
* IMR=0x0000;
/*
bit 15-6 0: reserved
bit 5 0: Level INT6 is masked
bit 4 0: Level INT5 is masked
bit 3 0: Level INT4 is masked
bit 2 0: Level INT3 is masked
bit 1 0: Level INT2 is masked
bit 0 0: Level INT1 is masked
*/
* IFR=0xFFFF; //清除所有中断标志,"写1清0"
}
//--------------------------------------------------------------------
// 函数名称 : void sci_init(void)
// 函数说明 : 初始化XINT1
// 输入参数 : 无
// 输出参数 : 无
//--------------------------------------------------------------------
void sci_init() //UART初始化子程序
{
* MCRA= *MCRA | 0x0003; //使能sci引脚
* IMR=0x0001; //使能int1中断 --RXINT Peripheral Interrupt Vector 0006h
// --TXINT Peripheral Interrupt Vector 0007h
// --in high-priority mode
* IFR=0xFFFF; //清除所有中断标志,"写1清0"
* SCICCR=0x0027; //SCI Communication Control Register
//1位停止位,用奇校验,禁用回馈测试,
//普通协议模式,8位数据位
/*
bit 15-8 0: reserved
bit 7 0: STOP BITS. 0 One stop bit
bit 6 0: PARITY. 0 Odd parity
bit 5 1: PARITY ENABLE. 1 Parity enabled;
bit 4 0: LOOP BACK ENA. 0 Loop Back test mode disabled
bit 3 0: ADDR/IDLE MODE.0 Idle-line mode protocol selected
bit 2-0 111: SCI CHAR2–0. 111 Character Length8(Bit)
*/
* SCICTL1=0x0023; //禁止接收错误中断,禁用传输唤醒模式,
//禁用休眠模式,使能数据发送和接收
/*
bit 15-7 0: reserved
bit 6 0: Receive error interrupt disabled
bit 5 1: SCI software reset (active low)
bit 4 0: Reserved
bit 3 0: Transmit feature is not selected
bit 2 0: Sleep mode disabled
bit 1 1: Transmitter enabled
bit 0 1: Send received characters to SCIRXEMU and SCIRXBUF
*/
* SCIHBAUD=0x0002;
* SCILBAUD=0x0008; //40M CLKOUT,波特率为9600 = CLKOUT/(BRR+1)*8
//BRR=208H=520
* SCICTL2=0x0002; //使用接收中断,禁用发送中断
/*
bit 15-8 0: reserved
bit 7 0: Transmitter buffer register ready flag.
bit 6 0: Transmitter empty flag.
bit 5-2 0: Reserved
bit 1 1: Enable RXRDY/BRKDT interrupt
bit 0 00 0: Disable TXRDY interrupt
*/
* SCIPRI=0x0010; //高中断优先级,仿真挂起时完成当前操作
/*
bit 15-7 0: reserved
bit 6 0: Interrupts are high-priority
bit 5 0: Interrupts are high-priority
bit 4-3 00: Immediate stop on suspend
bit 2-0 1: reserved
*/
asm(" clrc INTM"); //开总中断
}
//--------------------------------------------------------------------
// 函数名称 : void int1(void)
// 函数说明 : 中断1的子程序
// 输入参数 : 无
// 输出参数 : 无
//--------------------------------------------------------------------
interrupt void int1() //中断1中断子程序
{
UINT16 temp,k;
temp = *PVIR;
* IFR=0xFFFF; //清除所有中断标志,"写1清0"
if(temp = 0x0006)
{
k=* SCIRXBUF;
asm(" nop ");
* SCITXBUF=k;
asm(" nop ");
show = ~show;
}
}
/*
***********************************************************
- 函数名称 : void Delay(int numbers)
- 函数说明 : 延时
- 输入参数 : numbers
- 输出参数 : 无
***********************************************************
*/
void Delay(UINT16 numbers)
{
UINT16 i,j;
for(i=0;i<40000;i++);
for(j=0;j<numbers;j++);
}
/*
***********************************************************
- 函数名称 : interrupt void PHANTOM(void)
- 函数说明 : 伪中断子程序
- 输入参数 : 无
- 输出参数 : 无
***********************************************************
*/
interrupt void PHANTOM(void)
{
* IFR=0xFFFF; //清除所有中断标志,"写1清0"
asm(" clrc INTM"); //开总中断
return;
}
/*
************************************************************
****************** 主函数 *******************
************************************************************
*/
void main()
{
UINT16 temp;
//----------系统初始化-------------------------------
asm(" nop ");
cpu_init(); //初始化CPU
asm(" nop ");
sci_init(); //初始化UART设置寄存器
asm(" nop ");
//---------循环等待中断------------------------------
while(1)
port8001 = show;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -