?? ex10_addma.c
字號:
#define BASE_ADDR 0x809fc0
#define ERROR *(int *)(BASE_ADDR+0)
#define INT0 *(int *)(BASE_ADDR+1)
#define INT1 *(int *)(BASE_ADDR+2)
#define INT2 *(int *)(BASE_ADDR+3)
#define INT3 *(int *)(BASE_ADDR+4)
#define XINT0 *(int *)(BASE_ADDR+5)
#define RINT0 *(int *)(BASE_ADDR+6)
#define TINT0 *(int *)(BASE_ADDR+9)
#define TINT1 *(int *)(BASE_ADDR+0xa)
#define DINT *(int *)(BASE_ADDR+0xb)
#define T0CTL *(int *)0x808020
#define T0PRD *(int *)0x808028
#define T0CNT *(int *)0x808024
#define CG *(int *)0x808064
#define DMA_CTL *(int *)0x808000
#define DMA_SRC *(int *)0x808004
#define DMA_DST *(int *)0x808006
#define DMA_CNT *(int *)0x808008
cregister unsigned int IOF,IE,IF,ST;
void init_time01( void );
void init_dma( void );
interrupt void timer01(void);
interrupt void dma( void );
/* IO port*/
#define IOEN *(int *)0x900000
#define IOCFG *(int *)0x900001
#define IOSET *(int *)0x900002
#define IOSTA *(int *)0x900003
#define ADRES *(int *)0x900004
#define SERIALEN *(int *)0x900005
#define INTOE *(int *)0x900006
#define WDR *(int *)0x900007
/* DA */
#define DACH1 *(int *)0xC200000
#define DACH2 *(int *)0xC200001
#define DACH3 *(int *)0xC200002
#define DACH4 *(int *)0xC200003
#define DALD *(int *)0xC200004
/* AD*/
#define AD_PORT 0xc40007
interrupt void tb_int(void);
int num;
int nDmaBool;
main()
{
int i;
IF=0;/*清中斷寄存器*/
IE=0;
nDmaBool=0;
for(i=0;i<0x1000;i++)
*(int *)(0x2000+i)=0;
TINT0 = (int )timer01|0x60000000;/*設置定時器,定時器中斷為采樣率*/
DINT = (int )dma|0x60000000;
INT2= 0x60000000|(unsigned)tb_int;
IE=0x10404;/*打開定時器2中斷*/
ADRES =0;
for(i=0;i<10;i++);
ADRES =1 ;
for(i=0;i<100;i++); /*AD復位后需要等待一段時間才能工作*/
init_time01();
INTOE =1;
init_dma();
CG=0x1058;/*設置片外擴展總線寄存器,設置軟件等待位*/
ST=0x6000;/*全局中斷允許*/
for(;;);
}
void init_time01( void )
{
T0CTL = 0x601;
T0PRD = 75;
T0CNT = 0;
T0CTL = 0x6c1;
}
void init_dma( void )
{
DMA_SRC=AD_PORT;
DMA_DST=0x802000;
DMA_CNT=0x1000;
DMA_CTL=0xd43;
}
interrupt void timer01(void)
{
}
interrupt void dma( void )
{
//if(nDmaBool==0)
DMA_DST=0x802000;
DMA_CNT=0x1000;
num++;
}
interrupt void tb_int(void)
{
int tem;
tem=0;/*我在這里接了一個同步鐘(2秒一次脈沖)中斷,測試在這2秒時間內總共有多少個
DMA中斷,總共獲得的AD數據個數不應該少于2秒的AD采集數據個數*/
num=0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -