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

📄 keyboard_led.c

📁 一些基于TMS320 LF2407 DSP的实验程序
💻 C
字号:
/*******************************************************************/
#include "exp1_2407.h"
/*******************************************************************/
/***************************************************** 
          //* PFDATDIR&=0xFFEF; //7279clk低
          //* PFDATDIR&=0xFFF7; //7279cs低
          //* PFDATDIR&=0xFFFB; //7279data低
          //* PFDATDIR&=0xFFDF; //7279发数据
*******************************************************
          //* PFDATDIR|=0x0010; //7279clk高
          //* PFDATDIR|=0x0008; //7279cs高
          //* PFDATDIR|=0x0004; //7279data高
          //* PFDATDIR|0=x0020; //7279收数据
******************************************************/
unsigned int p;
char send_buff=0x00;
char rece_buff=0x00;
unsigned int data_buff=0x0000;

void sysini()                   //系统初始化子程序
{
     asm(" setc INTM");         //禁止所有中断
     asm(" setc SXM");          //抑制符号位扩展
     asm(" clrc OVM");          //累加器中结果正常溢出
     * WDCR=0x00E8;             //禁止看门狗
     * SCSR1=0x0009;            //CLKIN=7.3728M,CLKOUT=29.4912M,使能EVB模块
     * PFDATDIR=0x3C2C;         //将iopf2、3、4、5配置为输出脚,且iopf2、3、5初始值为1,iopf4初始值为0
}

void pdpintb_ini()              //pdpinta中断初始化子程序
{
     * EVBIFRA=0xFFFF;          //清除PDPINTA中断标志
     * IFR=0xFFFF;              //清除所有中断标志
     * EVBIMRA=0x0001;          //使能PDPINTA中断
     * IMR=0x0001;              //使能中断1
     asm(" clrc INTM");         //开总中断 
}    

void delay_8us()
{
     asm(" nop");
     asm(" nop");
     asm(" nop");
     asm(" nop");
     asm(" nop");
     asm(" nop");
     asm(" nop");
     asm(" nop");
}

void delay_50us()
{
     unsigned int j;
     for(j=0;j<18;j++);
}

void delay_25ms()
{
     unsigned int k;
     for(k=0;k<9500;k++);
}

void delay_long()
{
     unsigned int n;
     for(n=0;n<60000;n++);
     for(n=0;n<60000;n++);
}

void cs_high()
{
          * PFDATDIR=* PFDATDIR|0x0008; //7279cs高 
}

void cs_low()
{
          * PFDATDIR=* PFDATDIR&0xFFF7; //7279cs低
}

void send()
{         
          unsigned int m;
          cs_low();
          delay_50us();                 //延时50us;
          for(m=0;m<8;m++)
          {
               switch(send_buff&0x80)
               {
                   case 0x00:* PFDATDIR=* PFDATDIR&0xFFFB;break; //7279data低
                   case 0x80:* PFDATDIR=* PFDATDIR|0x0004; //7279data高
               }
               * PFDATDIR=* PFDATDIR|0x0010; //7279clk高
               delay_8us();
               * PFDATDIR=* PFDATDIR&0xFFEF; //7279clk低
               delay_8us();
               send_buff<<=1;
           }

}

void receive()
{
         unsigned int s;
         * PFDATDIR=* PFDATDIR&0xFBDF; //将iopf2配置为输入脚,7279发数据
         delay_50us();
         for(s=0;s<8;s++)
         {
            * PFDATDIR=* PFDATDIR|0x0010; //7279clk高
            delay_8us();
            data_buff=data_buff|((* PFDATDIR&0x0004)<<(13-s));//读iopf2引脚数据;  
            * PFDATDIR=* PFDATDIR&0xFFEF; //7279clk低
            delay_8us();
         }    
         rece_buff=data_buff>>8; 
         data_buff=0x0000;          //清除data_buff              
         * PFDATDIR=* PFDATDIR|0x0420; //将iopf2配置为输出脚,7279收数据
}

interrupt void pdpintb()
{
     send_buff=0x15;    //读键值指令
     send();
     receive();
     send_buff=0xA1; //数据左移指令
     send();
     send_buff=0xC8;
     send();
     send_buff=rece_buff;//将接收到的键值送显示
     send();
     * IFR=0xFFFF;              //清除所有中断标志
     * EVBIFRA=0xFFFF;          //清除PDPINTB中断标志
     asm(" clrc INTM");         //开总中断 
}

interrupt void nothing()        //哑中断子程序
{
     asm(" clrc INTM");         //开总中断  
}
  
void main()
{ 
          sysini();
          pdpintb_ini();    
          delay_25ms();
          send_buff=0xBF;    //测灯指令
          send();
          delay_long();
          delay_long();
          send_buff=0xA4;    //清除指令
          send();  
          for(p=0;p<16;p++)  //送出数据0x00~0x0F
          {
             send_buff=0xC8;    
             send();
             send_buff=p;
             send();
             delay_long();
             send_buff=0xA1; //数据左移指令
             send();    
          }
          send_buff=0xA4;    //清除指令
          send(); 
          //cs_high();
          for(;;); 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -