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

📄 int_test.c

📁 sl811hs 的驱动
💻 C
字号:
#include "vd.h"

#define TESTRAM_ADDR_W (*(volatile unsigned *)(0x3fc4800))
#define TESTRAM_ADDR_R (*(volatile unsigned *)(0x3fc4a00))
#define LCD_ADDR_BASE 0x3fc4000
#define LCD_ADDR_RI (*(volatile unsigned *)(LCD_ADDR_BASE+0x200))              //reading pointer for instruction 


int C_entry(void);
void ISR_EXT0(void);
void ISR_EXT1(void);
void ISR_EXT2(void);
void ISR_EXT3(void);
void ISR_UARTT1(void);
void ISR_UARTR1(void);
 
void IOInit(void);
void IntInit(void);

void EnableIRQ(void);

void delay(void);

extern void lcd_init(void);
extern void lcd_locate(B32 x,B32 y);
extern void lcd_print(char data[],B32 length);
extern B32 ltoa(B32 value,char data[],B32 radix);

extern void uartinit(void);
extern void uartsend(char data[]);
extern char uartreceive(char data[]);
extern B8 USBRead(B8 addr);

//extern void syn_init(void);
//extern void syn_test(void);

extern void usb_init(void);
extern void usb_main(void);

//extern void extint1(void);

extern char queuepush_T(char data);
extern char queuepop_T(void);
extern char queuetest_T(void);
extern char queuepush_R(char data);
extern char queuepop_R(void);
extern char queuetest_R(void);
extern uartpush(char data[]);
extern B16 uartpop(char data[]);

#define BIT_EINT0	(0x1)
#define BIT_EINT1	(0x1<<1)
#define BIT_EINT2	(0x1<<2)
#define BIT_EINT3	(0x1<<3)
#define BIT_UARTT0  (0x1<<4)
#define BIT_UARTR0  (0x1<<5)
#define BIT_UARTT1  (0x1<<6)
#define BIT_UARTR1  (0x1<<7)
#define BIT_GLOBAL	(0x1<<21)


//char data[22];
char data[255];
//B32 temp;
//B16 temp2;
//B8 temp3;


int C_entry(void)
{
   
    IOInit();   //init i/o ports
    IntInit(); // init interrupt 
    EnableIRQ(); // enable irq
    
    uartinit();
    
    uartpush("\n\r如果您能看到如下信息,说明串口已经可以正常发送了!\n\r");
    uartpush("那么开始工作吧!^_^\n\r");
    
    usb_init();
   
    while(TRUE) // wait irq service rountine	
    {
    	rIOPDATA=0xa0;
    	
    	usb_main();
    	//delay();
    	/*
    	if((USTAT1&0x00000040)!=0x00000000)
    	{
    		if(queuetest_T()!=0)			//发送队列不为空,则继续发送
  				UTXBUF1=(int)queuepop_T();
  
  			if(queuetest_T()>=60000)
 			{
  				uartsend("max uartbuffer used!\n\r");
  				while(1);
  	
  			}
  		}*/
    }			
      
}


void IOInit(void)			
{
    rIOPMOD = 0x3c0ff;			
    rIOPCON = 0xb5ad6;
   // rIOPDATA = 0x55;			
}


void IntInit(void)				      // int init
{
    rINTMOD  = 0x0;			// IRQ mode
    rINTMSK &= ~(BIT_GLOBAL|BIT_UARTR0|BIT_UARTT0|/*BIT_EINT0|*/BIT_EINT1|BIT_EINT2|BIT_EINT3);		//开启外部中断和串口中断
   
 }

void EnableIRQ(void)
{
 	 unsigned int tmp;
 	__asm
 	{
 		mrs		tmp,CPSR
 		bic		tmp,tmp,#0x80
 		msr		CPSR_c,tmp			
 	}
}

void ISR_EXT0(void)		
{   
 // rIOPDATA=0xfc;          //light D3&D4
  char data[255];
  uartpush("\n\r * extint0 occur! *\n\r");
  
  ltoa(USBRead(0x0d),data,16);
  uartpush("##########int_status=0x");
  uartpush(data);
  uartpush("\n\r");
  
  rINTPND|=BIT_EINT0;     //clear pending bit
}

void ISR_EXT1(void)		
{   
 // rIOPDATA=0xf0;          //light D3~D6
 // extint1();  
  uartpush("\n\r * extint1 occur! *\n\r");
  rINTPND|=BIT_EINT1;     //clear pending bit
}

void ISR_EXT2(void)		
{   
 // rIOPDATA=0xc0;          //light D3~D8 
  uartpush("\n\r * extint2 occur! *\n\r");
  rINTPND|=BIT_EINT2;     //clear pending bit
}

void ISR_EXT3(void)		
{ 
 // rIOPDATA=0x0;           //light all
 // delay();
 // rIOPDATA=0xff;
 // delay();
  uartpush("\n\r * extint3 occur! *\n\r");
  rINTPND|=BIT_EINT3;     //clear pending bit
}

void ISR_UARTT1(void)		
{ 
  //if(queuetest_T()!=0)			//发送队列不为空,则继续发送
  	//UTXBUF1=(int)queuepop_T();
  rINTPND|=BIT_UARTT1;     //clear pending bit
 
}

void ISR_UARTR1(void)		
{ 
  //queuepush_R(URXBUF1);		//不管是否满,都接收
  rINTPND|=BIT_UARTR1;     //clear pending bit
}




void ISR_UARTT0(void)		
{ 
  if(queuetest_T()!=0)			//发送队列不为空,则继续发送
  	UTXBUF1=(int)queuepop_T();
  
  if(queuetest_T()>=60000)
  {
  	uartsend("max uartbuffer used!\n\r");
  	while(1);
  	
  }
  rINTPND|=BIT_UARTT1;     //clear pending bit
  
 
}

void ISR_UARTR0(void)		
{ 
    queuepush_R(URXBUF1);		//不管是否满,都接收
  rINTPND|=BIT_UARTR1;     //clear pending bit
}




void delay(void)
{
	B32 temp;
	for(temp=0;temp<2000000;temp++);
}
/*B16  writetran(B8 *p,B8 len)  //return the num ofthe bytes transferred to user
{
 B16 a=0;
 B8 i,j,len1,*q;
 len1=len;
 for(j=0;j<=len/64;j++)
{
     q=&UsbBuf_R[PacketShift_R1][1];
for(i=0;i<((len1>UsbBuf_R[PacketShift_R1][0])? UsbBuf_R[PacketShift_R1][0]:len1) ;i++)
{
*p=*q;
p++;
q++;
a++;
}
PacketShift_R1++;
len1-=i;

}
return a;
}

 B16 readtran(B8 *m,B8 len)
 {
 B8 i,j,len2;
 B16 a=0; 
 len2=len;
 for(j=0;j<=len/64;j++)
 {
 for(i=0;i<((len2>64)? 64:len2);i++)
 {
 if(i==0)
 
 
 UsbBuf_T[PacketShift_T0][i]=((len2>64)? 64:len2);
 else
 UsbBuf_T[PacketShift_T0][i]=*m;
 m++;
 a++;
 }
 len2-=i;
 PacketShift_T0++;
 }
 return a;
 }*/

⌨️ 快捷键说明

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