📄 usarts.c
字号:
/*-----------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------*/
#include "includes.h"
/*-----------------------------------------------------------------------------------------------------
变量
-----------------------------------------------------------------------------------------------------*/
#if SPI0_EN
char SPI0SendDat[256]; //发送的数据
char SPI0Sendn; //记录发送到数据所在的位置
char SPI0Datn; //记录所存放数据的最后一个加1,构成循环队列
#endif
#if SPI1_EN
char SPI1SendDat[256]; //发送的数据
char SPI1Sendn; //记录发送到数据所在的位置
char SPI1Datn; //记录所存放数据的最后一个加1,构成循环队列
#endif
#if SPI0_EN
/*-----------------------------------------------------------------------------------------------------
功能:初始化USART0工作在SPI方式
入口:
出口:
-----------------------------------------------------------------------------------------------------*/
void InitSPI0(void)
{
#if SPI0_ADD_EN
SPI0_ADD_PORT_DIR=0xFF;
#endif
SPI0Sendn=0;
SPI0Datn=0;
P3DIR|=0x0E;
P3SEL|=0x0E;
U0CTL= CHAR | SYNC | MM & ~SWRST ; //8位数据,SPI方式,主方式,清除重置位
U0TCTL|= CKPH | SSEL0 | STC ; //__|- 的相位和极性,ACLK时钟源,3pin模式
U0BR0=0x02; //波特率为BRCLK的1/2
U0BR1=0;
ME1|=USPIE0; //使能该模块
// IE1=UTXIE0; //允许发送中断,放在初始化的最后,完成初始化后直接进入中断发送
}
/*-----------------------------------------------------------------------------------------------------
功能:SPI0发送中断服务历程
入口:
出口:
-----------------------------------------------------------------------------------------------------*/
#pragma vector=USART0TX_VECTOR
__interrupt void SPI0Send(void)
{
#if SPI0_ADD_EN
// unsigned int dt;
if(SPI0SendDat[SPI0Sendn]!=SPI0SendDat[SPI0Sendn-2]) while(!(U0TCTL&TXEPT));
SPI0_ADD_PORT_OUT=SPI0SendDat[SPI0Sendn];
// for(dt=0;dt<1000;dt++);
SPI0Sendn++;
#endif
// printf("0x%x\n",SPI0SendDat[SPI0Sendn]);
U0TXBUF=SPI0SendDat[SPI0Sendn++];
if(SPI0Sendn==SPI0Datn) IE1&=~UTXIE0; //停止发送
}
#endif
#if SPI1_EN
/*-----------------------------------------------------------------------------------------------------
功能:初始化USART1工作在SPI方式
入口:
出口:
-----------------------------------------------------------------------------------------------------*/
void InitSPI1(void)
{
#if SPI1_ADD_EN
SPI1_ADD_PORT_DIR=0xFF;
#endif
SPI1Sendn=0;
SPI1Datn=0;
P4DIR|=0x38;
P4SEL|=0x38;
U1CTL= CHAR | SYNC | MM & ~SWRST ; //8位数据,SPI方式,主方式,清除重置位
U1TCTL|= CKPH | SSEL0 | STC ; //__|- 的相位和极性,ACLK时钟源,3pin模式
U1BR0=0x02; //波特率为BRCLK的1/2
U1BR1=0;
ME2|=USPIE1; //使能该模块
// IE1=UTXIE0; //允许发送中断,放在初始化的最后,完成初始化后直接进入中断发送
}
/*-----------------------------------------------------------------------------------------------------
功能:SPI1发送中断服务历程
入口:
出口:
-----------------------------------------------------------------------------------------------------*/
#pragma vector=USART1TX_VECTOR
__interrupt void SPI1Send(void)
{
#if SPI1_ADD_EN
// unsigned int dt;
if(SPI1SendDat[SPI1Sendn]!=SPI1SendDat[SPI1Sendn-2]) while(!(U1TCTL&TXEPT));
SPI1_ADD_PORT_OUT=SPI1SendDat[SPI1Sendn];
// for(dt=0;dt<1000;dt++);
SPI1Sendn++;
#endif
U1TXBUF=SPI1SendDat[SPI1Sendn++];
if(SPI1Sendn==SPI1Datn) IE2&=~UTXIE1; //停止发送
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -