⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dsp2407.c

📁 利用LF2407的SPI口循环往复的输出数据
💻 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 + -