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

📄 main.c

📁 力天电子 dsp源码
💻 C
字号:
/******************************************************************/
/*Copyright (C), 2008-2009, 力天电子,LiTian Tech.Co.Ltd.		  */
/*  Module Name   : GPIO XINT1     							  	  */
/*  File Name     : main.c	   									  */        
/*  Author   	  : 侯长波                                        */     
/*  Create Date   : 2009/12/27                                    */      
/*  Version   	  : 2.0                                           */          
/*  Function      : 			         					      */                       
/*  Description   : 								              */            
/*  Support       : www.LT430.com 				                  */             
/******************************************************************/

/*****************头文件********************/  
#include "DSP281x_Device.h"
#include "System.h"

/****************端口宏定义*****************/
#define PS2_CLK GpioDataRegs.GPEDAT.bit.GPIOE0
#define PS2_DATA GpioDataRegs.GPDDAT.bit.GPIOD6 

/****************常量宏定义*****************/ 

/***************全局变量定义****************/

/****************函数声明*******************/ 
unsigned char Receive_PS2(void);
interrupt void X_INT1(void);
unsigned char Dill_key(unsigned char num);
void Init_PS2(void); 

/*------------------------------------------*/
/*形式参数:void                            */
/*返回值:void				                */
/*函数描述:主函数			                */
/*------------------------------------------*/ 
void main(void)
{
	InitSysCtrl();  // 系统初始化子程序,在DSP28_sysctrl.c中
	Init_PS2();
	while(1);   
} 

/*------------------------------------------*/
/*形式参数:void                            */
/*返回值:void				                */
/*函数描述:接收键值 				        */
/*------------------------------------------*/ 
unsigned char Receive_PS2(void) 
{
      unsigned char i,temp=0;
      while(!PS2_CLK);//等待时钟变为高
      for(i=0;i<8;i++)
        {
           temp>>=1;
           while(PS2_CLK);
           if(PS2_DATA) temp=temp|0x80;
           while(!PS2_CLK);
        }
       for(i=0;i<3;i++)
          {while(PS2_CLK);
           while(!PS2_CLK);
          }
      return(temp);
}

/*------------------------------------------*/
/*形式参数:void                            */
/*返回值:void				                */
/*函数描述:X_INT1中断处理函数               */
/*------------------------------------------*/ 
interrupt void X_INT1(void)
{  
	unsigned char  key;
	DINT;//关闭总中断
	if(PS2_DATA) goto back;
       key=Receive_PS2();
       if(key==0xe0)
          {
           key=Receive_PS2();
           if(key==0xf0) goto back;
           else key=Dill_key(key);
          }
       else if(key==0xf0) goto back;
       else key=Dill_key(key); 
   back:
	   PieCtrlRegs.PIEIFR1.bit.INTx4=0;//清零中断标志位
   	   PieCtrlRegs.PIEACK.all |= BIT0;  //响应中断
       EINT;   //开总中断
}

/*------------------------------------------*/
/*形式参数:void                            */
/*返回值:void				                */
/*函数描述:键盘散转处理                     */
/*------------------------------------------*/ 
unsigned char Dill_key(unsigned char num)
{
     switch(num)
	 {
		case 0x77:;break;//Num lock
        case 0x4a:;break;//   /
        case 0x7c:;break;//   *
        case 0x7b:;break;//   -
        case 0x79:;break;//   +
        case 0x5a:;break;//   Enter
        case 0x71:;break;//   .
        case 0x70:;break;//   0  
        case 0x69:;break;//	1
        case 0x72:;break;//	2
        case 0x7a:;break;//	3
        case 0x6b:;break;//	4
        case 0x73:;break;//	5
        case 0x74:;break;//	6
        case 0x6c:;break;//	7
        case 0x75:;break;//	8
        case 0x7d:;break;//	9
        case 0x66:;break;//	Bksp  
        default:break;
	 }
     return(num);   
}  

/*------------------------------------------*/
/*形式参数:void                            */
/*返回值:void				                */
/*函数描述:初始化中断	                    */
/*------------------------------------------*/ 	    
void Init_PS2(void)
{
    DINT;     //关闭总中断		
	EALLOW;	
	XIntruptRegs.XINT1CR.bit.POLARITY=0;//下降沿产生中断
	XIntruptRegs.XINT1CR.bit.ENABLE=1; //使能XINT1中断
	PieVectTable.XINT1= &X_INT1; //中断服务程序入口地址放入中断向量表
	EDIS;
	//依次使能各级中断:外设中相应中断位->PIE控制器->CPU
	PieCtrlRegs.PIEIER1.bit.INTx4=1;//XINT1使能位于PIE第1组第4个,使能
	IER|= M_INT1;//PIE第1组对应于CPU的可屏蔽中断1
	EINT;
}



 

⌨️ 快捷键说明

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