📄 isr.c
字号:
/********************************************
*
* DSP controlling code
* wrote by weikey(liuwei)
* Micro Nano Manufacture Laboratory of
* Institute of Electrical Engineering
* 2003.11.10
*
********************************************/
#include <stdio.h>
#include "c6713dsk.h"
#define USB_COMMAND mem_read(0xA0000010);
#define USB_STATUS mem_read(0xA0000000);
#define USB_STATUS1 mem_read(0xA0000004);
#define USB_STATUS2 mem_read(0xA0000008);
#define USB_STATUS3 mem_read(0xA000000C);
#define GETUSB_DATA mem_read(0xA0000020);
#define GETUSB_DATA1 mem_read(0xA0000024);
#define GETUSB_DATA2 mem_read(0xA0000028);
#define GETUSB_DATA3 mem_read(0xA000002C);
#define SENDUSB_DATA(tmp) mem_write(0xA0000020,tmp);
#define SENDUSB_DATA1(tmp) mem_write(0xA0000024,tmp);
#define SENDUSB_DATA2(tmp) mem_write(0xA0000028,tmp);
#define SENDUSB_DATA3(tmp) mem_write(0xA000002C,tmp);
unsigned char usbcmd = 0;
unsigned char flag_usb = 0;
unsigned char usbbuf[512];//,usbbufUP[1024];
void ReceiveData(int Addr);
void RespondData(int Addr);
/*-------------------------------------------------------------------------*/
/* exint6_isr() - interrupt service routine for EXTERNAL INTERRUPT6 */
/*-------------------------------------------------------------------------*/
interrupt void exint6_isr(void)
{
int j;
unsigned short count;
unsigned char tmp1,tmp2;
unsigned char flag_fifo=0,led_count,led_delay,tmp;
//flag_usb = 1;
for(j=0;j<512;j++)
{
usbbuf[j] = 0; //接收缓冲区清零
}
usbcmd = USB_COMMAND;
usbcmd = usbcmd & 0x03; //接收命令类型
if(usbcmd == 0)
{
//receive 512 byte
ReceiveData((int)&usbbuf);
/*
QDMA_SRC = 0xA0000024;
QDMA_CNT = 512;
QDMA_DST = (int)&usbbuf;
QDMA_S_OPT= 0x40200001;
tmp1=*(unsigned int*)(0x10000);
tmp2=*(unsigned int*)(0x10004);
count=(tmp2*256)+tmp1;
for(j=0;j<5;j++)//count
{
QDMA_SRC = (int)&usbbuf;
QDMA_CNT = 512;
QDMA_DST = 0xA000002C;
QDMA_S_OPT= 0x41000001;
*/
RespondData((int)&usbbuf);
//}
}
else if(usbcmd == 1)
{
//receive 512 bytes
QDMA_SRC = 0xA0000024;
QDMA_CNT = 512;
QDMA_DST = (int)&usbbuf;
QDMA_S_OPT= 0x40200001;
//usbbuf + 1
for(j=1;j<17*4;j++)
{
usbbuf[j]=usbbuf[j]+1;
}
//send 512 bytes
QDMA_SRC = (int)&usbbuf;
QDMA_CNT = 512;
QDMA_DST = 0xA000002C;
QDMA_S_OPT= 0x41000001;
}
else if(usbcmd == 2)
{
//receive 512 byte
QDMA_SRC = 0xA0000024;
QDMA_CNT = 512;
QDMA_DST = (int)&usbbuf;
QDMA_S_OPT= 0x40200001;
//usbbuf - 1
for(j=1;j<17*4;j++)
{
usbbuf[j]=usbbuf[j]-1;
}
//send 512 bytes
QDMA_SRC = (int)&usbbuf;
QDMA_CNT = 512;
QDMA_DST = 0xA000002C;
QDMA_S_OPT= 0x41000001;
}
else if(usbcmd == 3)
{
//receive 512 byte
QDMA_SRC = 0xA0000024;
QDMA_CNT = 512;
QDMA_DST = (int)&usbbuf;
QDMA_S_OPT= 0x40200001;
//usbbuf + 5
for(j=1;j<17*4;j++)
{
usbbuf[j]=usbbuf[j]+5;
}
//send 512 bytes
QDMA_SRC = (int)&usbbuf;
QDMA_CNT = 512;
QDMA_DST = 0xA000002C;
QDMA_S_OPT= 0x41000001;
}
}
/*-------------------------------------------------------------------------*/
/* ReceiveData(int Addr) - receive data from PC */
/*-------------------------------------------------------------------------*/
void ReceiveData(int Addr)
{
//unsigned short i;
//for(i=0;i<512;i++) buf[i] = 0;//clear up buf[512]
//use QDMA receive data from PC
QDMA_SRC = 0xA0000024;
QDMA_CNT = 512;
QDMA_DST = Addr;
QDMA_S_OPT= 0x40200001;
}
/*-------------------------------------------------------------------------*/
/* RespondData(int Addr) - respond data to PC */
/*-------------------------------------------------------------------------*/
void RespondData(int Addr)
{
//unsigned short i;
//for(i=0;i<512;i++) buf[i] = 0;//clear up buf[512]
//use QDMA respond data to PC
QDMA_SRC = Addr;
QDMA_CNT = 512;
QDMA_DST = 0xA000002C;
QDMA_S_OPT= 0x41000001;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -