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

📄 ex10_addma.c

📁 TMS320VC33对AD数据进行DMA操作实例。
💻 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 + -