📄 int_test.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 + -