📄 dsp2407.c
字号:
//利用LF2407的SPI口输出000H-FFFH然后再由FFFH-000H这样循环往复的数据
//用C语言编写
#include "register.h"
int GPR3;
int flag1;
int flag;
//系统初始化子程序
int initial()
{
asm("setc INTM"); //屏蔽中断
WSGR=0X00; //禁止所有等待
asm("CLRC SXM");
asm("CLRC OVM");
asm("CLRC CNF"); //B0被分配为数据空间
*SCSR1=0X81FE; //CLKIN=6M,CLKOUT=24M,并且启动SPI时钟
*WDCR=0X0E8; //不使用看门狗
}
//SPI初始化子程序
int SPIINITIAL()
{
*SPICCR=0X004F; //16 char bits在SPICLK的下降沿发送数据
*SPICTL=0X0006; //使用主动模式,一般的时钟方式,使用TALK
*SPIBRR=0X0007; //SPI的波特率为3M,CLKOUT=24M
*MCRB=0X003C; //设置通用引脚为SPI功能引脚
*MCRC=*MCRC&0X0FFFE; //设置IOPE0脚为通用引脚
*SPICCR=*SPICCR|0X0080; //使SPI退出复位状态
}
//SPI发送数据子程序,需要发送的数据存放在GPR3寄存器中
int SPITRANS()
{
*PEDATDIR=(*PEDATDIR|0X0100)&0X0FFFE; //设置IOPE0为输出,且输出低电平
*SPITXBUF=GPR3; //向SPI的发送缓冲器写一个发送数据
while(1)
{
flag=*SPISTS&0x40; //flag=SPI的中断标志
if(flag==0x40)
break; //如果SPI的中断标志为1,则证明SPI已经发送成功,则停止等待
}
*SPIRXBUF=*SPIRXBUF; //虚读SPIRXBUF寄存器,以清除SPI中断标志
*PEDATDIR=*PEDATDIR|0x01; //发送完毕,则IOPE0输出高电平,使发送的数据输出
}
//主程序
main()
{
initial();
SPIINITIAL();
GPR3=0x4000;
flag1=0x00;
while(1)
{
if(flag1==0x00 GPR3=GPR3+2;
else GPR3=GPR3=GPR3-2;
if(GPR3==0x5FFE) flag1=0x01;
if(GPR3==0x4000) flag1=0x00;
SPITRANS();
}
}
//当发生干扰中断时,执行此中断服务程序
void interrupt nothing()
{
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -