📄 sci_test.c
字号:
#include "main.h"
#include "LF2407regs.h"
volatile unsigned char sci_buf[2]={'b','g'};
volatile unsigned char rec_flag;
volatile unsigned char sent_flag = 0;
volatile unsigned char temp;
void sys_init(void) /*系统初始化*/
{
asm(" clrc SXM"); //抑制符号扩展
asm(" clrc OVM"); //溢出正常
asm(" clrc CNF"); //B0映射到数据空间
asm(" setc XF"); //禁止ROM引导
*WDCR=0x00E8; /*禁止看门狗*/
*SCSR1 = 0x814E; /*SCI时钟使能*/ /*设置PLL时钟 40MHZ*/
// set_wait(); //设置等待状态产生器
*MCRA = 0X00003;
*MCRB = 0X0FF00;
*MCRC = 0X00000;
*IMR=0x00000; /*允许优先级中断1*/
*IFR=0x0ffff; /*中断标志寄存器清0*/
}
#define MS_TIME_LOOP 0x500
void wait_ms( volatile unsigned int delay_val ) /*延时函数wait_ms()*/
{
unsigned int i;
int ms_ctr;
for ( i = 0; i < delay_val; i++ )
{
ms_ctr = MS_TIME_LOOP;
while ( ms_ctr )
{
ms_ctr--;
}
}
return;
}
void c554a_init(void) /*TL16C554A初始化*/
{
volatile unsigned int *temp_d;
temp_d=(volatile unsigned int*)PFDATDIR;
*temp_d |=(B14_MSK|B6_MSK); /*IOPF6输出高电平,复位TL16C554A*/
wait_ms(10);
*temp_d &=(~B6_MSK);
/*初始化TL16C554A寄存器*/
temp=0x80; /*使能波特率因子寄存器访问*/
OUTMAC((_BASE_ADD_A+3h),temp);
OUTMAC((_BASE_ADD_B+3h),temp);
OUTMAC((_BASE_ADD_C+3h),temp);
OUTMAC((_BASE_ADD_D+3h),temp);
temp=0x06; /*设置波特率为19200*/
OUTMAC(_BASE_ADD_A,temp);
OUTMAC(_BASE_ADD_B,temp);
OUTMAC(_BASE_ADD_C,temp);
OUTMAC(_BASE_ADD_D,temp);
temp=0x00;
OUTMAC((_BASE_ADD_A+1h),temp);
OUTMAC((_BASE_ADD_B+1h),temp);
OUTMAC((_BASE_ADD_C+1h),temp);
OUTMAC((_BASE_ADD_D+1h),temp);
temp=0x03; /*8位数据位,1位停止位,无奇偶校验,禁止波特率因子寄存器访问*/
OUTMAC((_BASE_ADD_A+3h),temp);
OUTMAC((_BASE_ADD_B+3h),temp);
OUTMAC((_BASE_ADD_C+3h),temp);
OUTMAC((_BASE_ADD_D+3h),temp);
temp=0x07; /*使能FIFO,1个字符触发接收中断*/
OUTMAC((_BASE_ADD_A+2h),temp);
OUTMAC((_BASE_ADD_B+2h),temp);
OUTMAC((_BASE_ADD_C+2h),temp);
OUTMAC((_BASE_ADD_D+2h),temp);
temp=0x01; /*使能接收中断*/
OUTMAC((_BASE_ADD_A+1h),temp);
OUTMAC((_BASE_ADD_B+1h),temp);
OUTMAC((_BASE_ADD_C+1h),temp);
OUTMAC((_BASE_ADD_D+1h),temp);
INMAC(_BASE_ADD_A,temp); /*将串口干扰读走*/
INMAC(_BASE_ADD_B,temp);
INMAC(_BASE_ADD_C,temp);
INMAC(_BASE_ADD_D,temp);
}
void c554a_a_sent(unsigned char data) /*A模块数据发送*/
{
temp=data;
OUTMAC(_BASE_ADD_A,temp);
}
void c554a_b_sent(unsigned int data) /*B模块数据发送*/
{
temp=data;
OUTMAC(_BASE_ADD_B,temp);
}
void c554a_c_sent(unsigned int data) /*C模块数据发送*/
{
temp=data;
OUTMAC(_BASE_ADD_C,temp);
}
void c554a_d_sent(unsigned int data) /*D模块数据发送*/
{
temp=data;
OUTMAC(_BASE_ADD_D,temp);
}
void c554a_a_rec() /*A模块数据的接收处理*/
{
volatile unsigned int ad;
INMAC(_BASE_ADD_A,temp);
ad=temp;
c554a_a_sent(ad);
}
void c554a_b_rec() /*B模块数据的接收处理*/
{
volatile unsigned int bd;
INMAC(_BASE_ADD_B,temp);
bd=temp;
c554a_b_sent(bd);
}
void c554a_c_rec() /*C模块数据的接收处理*/
{
volatile unsigned int cd;
INMAC(_BASE_ADD_C,temp);
cd=temp;
c554a_c_sent(cd);
}
void c554a_d_rec() /*D模块数据的接收处理*/
{
volatile unsigned int dd;
INMAC(_BASE_ADD_D,temp);
dd=temp;
c554a_b_sent(dd);
}
void sci_init(void) /*SCI初始化*/
{
*SCICTRL1 =0x0000; //复位SCI 禁止接收错误中断 没有选定发送特征 禁止休眠 禁止发送 禁止接收
*SCICCR =0x0007; //设置1个停止位,不使能奇偶检验,空闲线多处理器模式,8位字符
*SCICTRL2 =0x00C0; //禁止RXRDY/TXRDY
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -