1、EMIF或XBUS异步读/写脉冲宽度
C6203B为了能与不同存取(Access)速度的异步设备(或器件)如SRAM、Flash等连接,可通过设置相关寄存器的参数来控制读/写脉冲的宽度,EMIF总线的寄存器为CECTL0~3,XBUS总线为XCECTL0~3,总线读/写脉冲的宽度由这些寄存器中的“Setup”和“Strobe”位值决定。
加电复位后,缺省值(最大值)为:Setup=1111(15),Strobe=111111(63),这样,Setup+Strobe=15+63=78,如果使用250MHz系统时钟,其周期T=4ns,那么78x4=312ns。也就是说,EMIF/XBUS总线最低可接300ns的异步设备(器件),好在一般SRAM、Flash等的存取速度均在100ns左右,故都可直接与EMIF/XBUS总线相连。
2、DMA传输问题
C6203B进行DMA传输时虽然可以字节(8bit)方式传输,但在DMA Config时,源/目的地址仍使用Uint32类型指针,因此,如果只传输1个字节,也要使用Uint21指针变量。如果确要使用Uint8型的,则必须定义一个元素是4的整数倍的数组,如:
Uint8 buf[4];
否则DMA传输数据不正确。
3、外部中断触发沿
C6023B的外部中断INT4~INT7缺省情况是“下降沿”触发的,但在BIOS配置中可以更改为“上升沿”触发,有些用户往往忽略了这一点,例如,初学者先是买一套开发板学习,然后参照开发板设计自己的硬件电路,再把开发板的源程序例子移植到自己的系统中,但在调式中断时发现总是不对却又找不到原因。其实原因很简单,就是开发板可能在BIOS配置时将某个中断改为“上升沿”触发了,而用户自己设计的电路仍是“下降沿”触发的。只要修改一下BIOS配置就可以了。
4、通用I/O口的复位状态和驱动电流
C6203B的缓冲串口(McBSP)可以配置成通用I/O口使用,系统加电复位后,未配置前所有缓冲串口引脚均处于“高阻”状态,用户可根据需要,对某个I/O口加4.7K"上拉“电阻或20K”下拉“电阻使其复位后固定在"高电平”或“低电平”;此外,缓冲串口作为普通I/O口使用时,其最大驱动电流为8mA,因此驱动负载时要注意,例如驱动光耦时,限流电阻要选择适当,以HCPL-181为例,电压为3.3V,限流电阻取510Ω就可以,驱动电流I=3.3/510=6mA,既达到181开关导通电流(5mA),又未超过最大驱动电流(8mA)。
5、C++地址指针增量重载运算符“++”
在一般的C++中,增量运算符“++”表示“加1”,在DSP C++(CCS)编译器中,对于普通变量,仍表示“加1”,但对于不同类型的地址指针变量,重载运算符“++”时有不同含义:
32位地址指针(unsigned int *):加4(一个双字);
16位地址指针(unsigned short *):加2(一个字);
8位地址指针(unsigned char *):加1(一个字节)。
同理,“--”运算符也有类似的情况。下面举一个例子来说明:
假设C6203B的EMIF总线上CE1(0x01400000)接的是8bit并行Flash(如:SST39VF080),且DSP的EA21~EA2接Flash的A19~A0。在程序中定义:
Uint32 data,*dp=CE0;
那么指令:data=*dp++;第一次data取的是Flash的0~3单元的内容,然后dp指向Flash的4单元;第二次data取的是Flash的4~7单元内容...
如果定义:Uint8 data,*dp=CE0;由于EA2接A0,那么必须使用:data=*(dp++<<2);来读取Flash的0,1,2...单元的内容。 |