http://www.analogcn.com/Article/wz3/200802/20080213110735.html
ADSP调试记录
DSP外围不用管脚处理: nmi<='0'; br<='1'; ardy<='1';
C编程
short int *p1; //定义16位宽数据指针
int *p1; //定义32位宽数据指针
*p1=0xff; //访问p1指向地址的存储单元
SDRAM
地址线连接:
DSP A1~A10 A12 A13 A18 A19 ABE0 ABE1 与
SDRAM A0~A9 A11 A12 BA0 BA1 SDQM0 SDQM1 相连
DSP寄存器设置:
//SDRAM Refresh Rate Control Register
*pEBIU_SDRRC = 0x00000304;
//SDRAM Memory Bank Control Register
*pEBIU_SDBCTL = 0x00000037;
//SDRAM Memory Global Control Register
*pEBIU_SDGCTL = 0x0091998d;
然后可以直接访问SDRAM允许范围内的存储地址,无需其他操作。
DPRAM
DSP寄存器设置:
*pEBIU_AMBCTL0 = 0x7bb07bb0;
*pEBIU_AMBCTL1 = 0x7bb07bb0;
*pEBIU_AMGCTL = 0x000f;
然后可以直接访问DPRAM允许范围内的存储地址,无需其他操作。
PF端口调试
输入(PF8为例):
void Init_Flags(void)
{
*pFIO_INEN = 0x0100;
*pFIO_DIR = 0x0000;
}
然后读取*pFIO_FLAG_S寄存器的相应位即为输入数据。
输入(PF8中断为例)
void Init_Flags(void)
{
*pFIO_INEN = 0x0100;
*pFIO_DIR = 0x0000;
*pFIO_EDGE = 0x0100;
*pFIO_MASKA_D = 0x0100;
}
输出(PF8为例)
void Init_Flags(void)
{
*pFIO_DIR = 0x0100;
*pFIO_FLAG_S = 0x0100; //输出为1
*pFIO_FLAG_C = 0x0100; //输出为0
}
中断调试
注意:中断调用要包含头文件:#include <sys\exception.h>
以TIMER中断为例:
首先配置TIMER寄存器:
void Init_Timers(void)
{
*pTIMER0_CONFIG = 0x0019; //此处设置为利用内部时钟
*pTIMER0_PERIOD = 0x00800000;
*pTIMER0_WIDTH = 0x00400000;
*pTIMER_ENABLE = 0x0001;
}
然后配置中断寄存器:
void Init_Interrupts(void)
{
// assign core IDs to interrupts
*pSIC_IAR0 = 0xffffffff;
*pSIC_IAR1 = 0xffffffff;
*pSIC_IAR2 = 0xfffffff4; // Timer0 -> ID4;
// assign ISRs to interrupt vectors
register_handler(ik_ivg11, Timer0_ISR); // Timer0 ISR -> IVG 11
// enable Timer0 and FlagA interrupt
*pSIC_IMASK = 0x00010000;
}
最后编写中断子程序:
EX_INTERRUPT_HANDLER(Timer0_ISR)
{
// confirm interrupt handling
*pTIMER_STATUS = 0x0001;
printf("\n Timer0 interrupt!\n");
}