收藏0 举报
//USCI0.c 文件代码: #include "bsp/usci0.h” bit Uart0SendFlag = 0; //Uart0发送中断标志位 bit Uart0ReceiveFlag = 0; //Uart0接收中断标志位 bit SPI0Flag = 0; //SPI0数据传输完成标志位 bit TWI0Flag = 0; //TWI0中断标志位 /***************************************************** *函数名称:static void Uart0_Init(uint Freq,unsigned long int baud) *函数功能:Uart0中断初始化 *入口参数:Freq-主频,baud-波特率 *出口参数:void *****************************************************/ static void Uart0_Init(unsigned int Freq,unsigned long int baud) { P0CON &= 0xCF; //TX/RX设置为输入带上拉 P0PH |= 0x30; OTCON |= 0x30; //串行接口SSI0选择Uart0通信 US0CON0 = 0x50; //设置通信方式为模式一,允许接收 US0CON1 = Freq*1000000/baud; //波特率低位控制 US0CON2 = (Freq*1000000/baud)>>8; //波特率高位控制 IE1 |= 0x01; //开启SSI0中断 EA = 1; } /***************************************************** *函数名称:static void TWI0_Init(void) *函数功能:TWI0初始化 *入口参数:void *出口参数:void *****************************************************/ static void TWI0_Init(void) { OTCON |= 0x20; //选择TWI0模式 US0CON0 = 0x80; //主模式, 使能应答标志位 US0CON1 = 0x05; //---- xxxx x为时钟速率 IE1 |= 0x01; EA = 1; } /***************************************************** *函数名称:static void SPI0_Init(void) *函数功能:SPI0初始化 *入口参数:void *出口参数:void *****************************************************/ static void SPI0_Init(void) { OTCON |= 0X10; //选择SPI0模式 US0CON0 = 0x3F; //设置SPI0为主设备,SCK空闲时间为高电平,SCK周期第二沿采集数据,时钟速率为Fsys/128 US0CON1 = 0x01; //MSB优先发送,8位传输,允许发送中断 US0CON0 |= 0x80; //开启SPI0 IE1 |= 0x01; EA = 1; } /***************************************************** *函数名称:void USCI0_Init(void) *函数功能:USCI0初始化 *入口参数:void *出口参数:void *****************************************************/ void USCI0_Init(void) { #if (SSI0_Mode == Uart0) Uart0_Init(32,9600); #endif #if (SSI0_Mode == TWI0) TWI0_Init(); #endif #if (SSI0_Mode == SPI0) SPI0_Init(); #endif } /***************************************************** *函数名称:void USCI0_Send_Byte(unsigned char c) *函数功能:USCI0写一个字节数据 *入口参数:void *出口参数:void *****************************************************/ void USCI0_Send_Byte(unsigned char c) { #if (SSI0_Mode == Uart0) US0CON3 = c; while(!Uart0SendFlag); Uart0SendFlag = 0; #endif #if (SSI0_Mode == TWI0) US0CON1 |= 0x20; //产生起始条件 while(!TWI0Flag); TWI0Flag = 0; US0CON3 = 0x10; //发送地址及读命令 while(!TWI0Flag); TWI0Flag = 0; US0CON3 = 0x55; //发送地址及读命令 while(!TWI0Flag); TWI0Flag = 0; USCI_Delay(100); US0CON1 |= 0x10; USCI_Delay(100); #endif #if (SSI0_Mode == SPI0) US0CON2 = c; while(!SPI0Flag); SPI0Flag = 0; USCI_Delay(1000); #endif } /***************************************************** *函数名称:void USCI0_Send_String(unsigned char *str) *函数功能:USCI0发送一个字符串 *入口参数:void *出口参数:void *****************************************************/ void USCI0_Send_String(unsigned char *str) { while(*str) { USCI0_Send_Byte(*str); str++; } } /***************************************************** *函数名称:void TWI0/SPI0/UART0_Int() interrupt 7 *函数功能:SSI0中断函数 *入口参数:void *出口参数:void *****************************************************/ #if (SSI0_Mode == Uart0) void Uart0_Int() interrupt 7 //Uart0中断函数 { if(US0CON0&0x02) //发送标志位判断 { US0CON0 &= 0xFD; Uart0SendFlag = 1; } if((US0CON0&0x01)) //接收标志位判断 { US0CON0 &= 0xFE; Uart0ReceiveFlag = 1; } } #endif #if (SSI0_Mode == TWI0) void TWI0_Int() interrupt 7 //TWI0中断函数 { if(US0CON0&0x40) { US0CON0 &= 0xbf; //中断清零 TWI0Flag = 1; } } #endif #if (SSI0_Mode == SPI0) void SpiInt(void) interrupt 7 //SPI0中断函数 { if(US0CON1&0X08) //发送缓存器空标志判断 { US0CON1 &= ~0X08; } if(US0CON1&0X80) //数据传输标志位判断 { US0CON1 &= ~0X80; SPI0Flag = 1; } } #endif
/****************************************************************************/ //USCI0.h 文件代码: #ifndef _USCI0_H #define _USCI0_H #include "H/SC95F861x_C.H" #include "bsp/timer.h" //USCI0 三合一模式: #define Uart0 0 #define TWI0 1 #define SPI0 2 //选择当前使用的模式 #define USCI0_Mode Uart0 static void Uart0_Init(unsigned int Freq,unsigned long int baud); static void TWI0_Init(void); static void SPI0_Init(void); void USCI0_Init(void); void USCI0_Send_Byte(unsigned char c); void USCI0_Send_String(unsigned char *str); #endif
本版积分规则 发表回复 回帖并转播 回帖后跳转到最后一页
293
3837
81
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注电源系统设计
扫码关注21ic项目外包
扫码浏览21ic手机版
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才
京公网安备 11010802024343号