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