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

📄 gpio.c

📁 tms320vc5509a dsp 芯片的有关例子程序
💻 C
字号:

// ** TMS320VC5509A Data Sheet (Rev. B).pdf 的51页 地址在72页
// ** EMIF 的地址线也可以作为GPIO使用 具体见TMS320VC5509 Data Sheet (Rev. F).pdf的 51 和 72 页

ioport unsigned int *EBSR = (unsigned int *)0x6c00;  // ** 
ioport unsigned int *ledo = (unsigned int *)0x401000;

void delay(unsigned int t)
{
	unsigned int i;

	for (; t != 0; t--)
		for (i=1000; i != 0; i--);
}

void CLK_init()
{
   ioport unsigned int *clkmd;
   clkmd=(unsigned int *)0x1c00;
   *clkmd =0x21f3;	// 晶振12Hz,9Hz=0x21f3;// 144MHz=0x2613
}
void SRAM_init()	// ** 初始化EMIF模式
{
    ioport unsigned int *ebsr  =(unsigned int *)0x6c00;
    ioport unsigned int *egcr  =(unsigned int *)0x800;
    ioport unsigned int *emirst=(unsigned int *)0x801;
    //ioport unsigned int *emibe =(unsigned int *)0x802;  
    ioport unsigned int *ce01  =(unsigned int *)0x803;
    //ioport unsigned int *ce02  =(unsigned int *)0x804;
    //ioport unsigned int *ce03  =(unsigned int *)0x805;
    ioport unsigned int *ce11  =(unsigned int *)0x806;
    //ioport unsigned int *ce12  =(unsigned int *)0x807;
    //ioport unsigned int *ce13  =(unsigned int *)0x808;
    ioport unsigned int *ce21  =(unsigned int *)0x809;
    //ioport unsigned int *ce22  =(unsigned int *)0x80A;
    //ioport unsigned int *ce23  =(unsigned int *)0x80B;
    ioport unsigned int *ce31  =(unsigned int *)0x80C;
    //ioport unsigned int *ce32  =(unsigned int *)0x80D;
    //ioport unsigned int *ce33  =(unsigned int *)0x80E;
    ioport unsigned int *sdc1  =(unsigned int *)0x80F;
    //ioport unsigned int *sdper =(unsigned int *)0x810;
    //ioport unsigned int *sdcnt =(unsigned int *)0x811;
    ioport unsigned int *init  =(unsigned int *)0x812;
    ioport unsigned int *sdc2  =(unsigned int *)0x813;
    *ebsr   = 0x221;//221//1321
//    *egcr   = 0x220;
    *egcr   = 0x220;
    *ce01   = 0x3000;
    *ce11   = 0x1fff;
    *ce21   = 0x1fff;
    *ce31   = 0x1fff;
    *emirst = 0;
    *sdc1   = 0x5958;
    *sdc2   = 0x38F;
    *init   = 0;
}
// ** 若要控制LED,则要在EMIF模式下对0x400000地址赋1; (只有7个I/O口其中GPIO5是没有的)
ioport unsigned int *gpio_dir = (unsigned int *)0x3400;	// ** 专用的GPIO口
ioport unsigned int *gpio_dat = (unsigned int *)0x3401;	// ** 本实验板中的GPIO5是不存在的


// ** PARALLEL PORT MODLE BIT IS 00 OR 11 (有14个I/O口)
// ** EBSR(0x6c00 External Bus Selection Register)寄存器的并行口模式控制位1、0(Parallel Port Mode)
ioport unsigned int *agpio_en  = (unsigned int *)0x4400;// ** EMIF的地址总线作GPIO用时使能
ioport unsigned int *agpio_dir = (unsigned int *)0x4401;// ** EMIF的地址总线作GPIO用时方向控制
ioport unsigned int *agpio_dat = (unsigned int *)0x4402;// ** EMIF的地址总线作GPIO用时数据

// ** PARALLEL PORT MODLE BIT IS 10 OR 11 (有6个I/O口GPIO8-13)
// ** External Parallel Bus control lines
ioport unsigned int *ehpigpio_en  = (unsigned int *)0x4403;// ** EMIF的地址总线作GPIO用时使能
ioport unsigned int *ehpigpio_dir = (unsigned int *)0x4404;// ** EMIF的地址总线作GPIO用时方向控制
ioport unsigned int *ehpigpio_dat = (unsigned int *)0x4405;// ** EMIF的地址总线作GPIO用时数据


unsigned int led[4] = {0x1,0x2,0x4,0x8};

main()
{
	unsigned int i;

	CLK_init();
	// ** Dedicated GPIO 专用的GPIO口
/*	*gpio_dir = 0xff;
	*gpio_dat = 0xff;
	SRAM_init();	// ** EIMF模式
	*((unsigned int *)0x400000)=1;	// ** 发命令给CPLD将LED接到GPIO上
*/
	// ** EMIF 的 Address 作为GPIO
/*	*EBSR = 0x200;	// PARALLEL PORT MODLE 00;
	*EBSR = 0x203;	// PARALLEL PORT MODLE 11;	
	*agpio_en = 0xffff;	// ** 1时为GPIO,0时为Address
	*agpio_dir= 0xffff;
	*agpio_dat= 0x04;*/
	
	// ** EHPI 的 6根控制线作为GPIO8-13
	*EBSR = 0x202;	// PARALLEL PORT MODLE 10;
//	*EBSR = 0x203;	// PARALLEL PORT MODLE 11;	
	*ehpigpio_en = 0xffff;	// ** 1时为GPIO,0时为Address
	*ehpigpio_dir= 0xffff;
	*ehpigpio_dat= 0x04;
	
	i = 0;
	while(1)
	{		
		asm(" bclr XF ");
		delay(100);
		asm(" bset XF ");
		delay(100);
//		*gpio_dat = led[i];
		i++;
		if (i>3)i = 0;
	}		
}

⌨️ 快捷键说明

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