菜鸟请教F2802程序
说出来实在丢人,做单片机7年了,现在想学DSP,刚好手头上有F2802这个芯片,就写点程序来驱动玩玩,可是搞了两天尽然连GPIO都未能驱动(硬件是正常的,晶振、复位、电源都正常,别人的程序能跑),望玩过2802的XD指点一下。不胜感激!程序如下:
void main(void)
{
//初始化系统HSPCLK = SYSCLKOUT/2LSPCLK = SYSCLKOUT/4
int temp=5000;
EALLOW;
SysCtrlRegs.WDCR= 0x0068;
SysCtrlRegs.PLLCR.bit.DIV = 0x06;
SysCtrlRegs.PLLSTS.bit.CLKINDIV = 0;
while(temp--);
SysCtrlRegs.HISPCP.all = 0x0001; // HSPCLK = SYSCLKOUT/2
SysCtrlRegs.LOSPCP.all = 0x0002; // LSPCLK = SYSCLKOUT/4
EDIS;
/*关中断*/
DINT;
IER = 0x0000;
IFR = 0x0000;
/*初始化PIE中断*/
InitPieCtrl(); //这个就不写了, Disable the PIEClear all PIEIER registers:
/*初始化PIE中断矢量表*/
InitPieVectTable();
//
InitGpio();
while(1)
{
GpioDataRegs.GPADAT.bit.GPIO26 = 1;
delay();
GpioDataRegs.GPADAT.bit.GPIO26 = 0;
delay();
}
}
void InitPieVectTable(void)
{
int16 i;
Uint32 *Source = (void *) &PieVectTableInit;
Uint32 *Dest = (void *) &PieVectTable;
EALLOW;
for(i=0; i < 128; i++)
*Dest++ = *Source++;
EDIS;
// Enable the PIE Vector Table
PieCtrlRegs.PIECTRL.bit.ENPIE = 1;
}
void InitGpio(void)
{
EALLOW;
// Each GPIO pin can be:
// a) a GPIO input/output
// b) peripheral function 1
// c) peripheral function 2
// d) peripheral function 3
// By default, all are GPIO Inputs
GpioCtrlRegs.GPAMUX1.all = 0x0000; // GPIO functionality GPIO0-GPIO15
GpioCtrlRegs.GPAMUX2.all = 0x0000; // GPIO functionality GPIO16-GPIO31
GpioCtrlRegs.GPBMUX1.all = 0x0000; // GPIO functionality GPIO32-GPIO34
GpioCtrlRegs.GPADIR.all = 0x0000; // GPIO0-GPIO31 are GP inputs
GpioCtrlRegs.GPBDIR.all = 0x0000; // GPIO32-GPIO34 are inputs
// Each input can have different qualification
// a) input synchronized to SYSCLKOUT
// b) input qualified by a sampling window
// c) input sent asynchronously (valid for peripheral inputs only)
GpioCtrlRegs.GPAQSEL1.all = 0x0000; // GPIO0-GPIO15 Synch to SYSCLKOUT
GpioCtrlRegs.GPAQSEL2.all = 0x0000; // GPIO16-GPIO31 Synch to SYSCLKOUT
GpioCtrlRegs.GPBQSEL1.all = 0x0000; // GPIO32-GPIO34 Synch to SYSCLKOUT
// Pull-ups can be enabled or disabled.
GpioCtrlRegs.GPAPUD.all = 0x0000; // Pullup's enabled GPIO0-GPIO31
GpioCtrlRegs.GPBPUD.all = 0x0000; // Pullup's enabled GPIO32-GPIO34
//GpioCtrlRegs.GPAPUD.all = 0xFFFF; // Pullup's disabled GPIO0-GPIO31
//GpioCtrlRegs.GPBPUD.all = 0xFFFF; // Pullup's disabled GPIO32-GPIO34
GpioCtrlRegs.GPADIR.bit.GPIO26=1; //Output BUZZER
EDIS;
} 个人理解:在控制DSP时,配置好时钟后不就可以直接驱动IO口了吗?也没看到IO口也需要时钟啊(像STM32),怎么芯片就是没动起来了?不知是不是我还有地方没有配置好,望知道的XD给指点一下。谢谢! GpioDataRegs.GPASET.bit.GPIO26 = 1 //置1
GpioDataRegs.GPACLEAR.bit.GPIO26 = 1//清零 看不出什么问题,时钟配置好,IO口配置好,就没什么了。
TI都有例子的,LZ没运行一下吗? 电子小生 发表于 2013-7-23 12:56 static/image/common/back.gif
GpioDataRegs.GPASET.bit.GPIO26 = 1 //置1
GpioDataRegs.GPACLEAR.bit.GPIO26 = 1//清零
我首先用的就是这个方法,没成功所有改了。我再查看了资料,没发现设置问题,嗨,惭愧啊! sleet1986 发表于 2013-7-23 14:19 static/image/common/back.gif
看不出什么问题,时钟配置好,IO口配置好,就没什么了。
TI都有例子的,LZ没运行一下吗? ...
我没有找到2802的例子,不知道再哪能找到,能否提供一下网址?谢谢! randyzzy 发表于 2013-7-23 20:34 static/image/common/back.gif
我没有找到2802的例子,不知道再哪能找到,能否提供一下网址?谢谢!
这个附件是TI280x 系列的的库和实例的安装文件,下面的是网址。
http://www.ti.com.cn/tool/cn/SPRC191 正在学习使用28015,希望会不会和楼主一样跑不起例程。 本帖最后由 steaven2000 于 2014-8-25 18:38 编辑
你把Init_GPIO屏蔽了?这个不能屏蔽,因为DIR寄存器GPIO26需设置为输出(1)。
上面有人提到SET/CLEAR寄存器,这里LED驱动不了不是这个原因,楼主中间已经有delay了。
还有,楼主要注意查看一下你的delay到底是多长时间,太短的话看不到LED闪的。 GpioDataRegs.GPADAT.bit.GPIO26 = 1;
这个改为 GpioDataRegs.GPASET.bit.GPIO26 = 1;
GpioDataRegs.GPADAT.bit.GPIO26 = 0;
这个改为GpioDataRegs.GPACLEAR.bit.GPIO26 = 1;
试试
另外你确定你的GPIO的时钟打开了吗?
页:
[1]