tag 标签: c6203b

相关博文
  • 热度 22
    2012-12-20 10:43
    1728 次阅读|
    1 个评论
    在我们的DSP系统中,出现了一种非常奇怪的现象:系统加电复位(冷复位)后,XBUS总线的-XWE/-XWAIT信号一直为低(正常时应为高!),当DSP写XBUS总线时(异步I/O方式,使用-XCE0)没有正常的负脉冲,而在DSP读XBUS总线时(同步FIFO方式,使用-XCE2)却有连续的正脉冲,仔细分析好像是-XRE(或-XOE)的反相信号。导致DSP程序无法将数据写入外部设备。这种异常现象有如下几个特点: (1)不是每次加电都出现,有时异常,有时正常,当系统加电工作时间长一点再关机加电,异常出现的频率较高,达50%左右。 (2)出现异常现象后,人工(按钮)热复位能复位DSP重新加载程序,但异常现象任然存在,不能消除。 (3)与关机开机的时间间隔有关,间隔时间短,异常出现的概率就高。通过分析发现如果关机后3.3V上残留电压大于0.5V就开机,出现异常的概率就较高。 (4)与DSP程序及软件配置无关,清除DSP程序加电也会出现,即加电后-XWE一直为低。只是因无DSP程序,没有读操作也就不会出现连续正脉冲。 (5) 由于我们的系统XBUS是接到FPGA中的,且是内层走线无法断开,因此只能在FPGA中将-XWE的引脚定义去掉使其与FPGA内部逻辑分离,或者将FPGA程序清除。但异常现象任然存在,因此可基本断定与FPGA无关。 (6) 异常现象在几块板子中都出现,有的在常温下出现,有的在低温下出现,出现的概率也不一样,有的高,有的低。 (7) 同样的电路连接及相同批次的器件,在另一个系统中就没有出现这种异常现象,只是该系统是采用2块板叠层结构,电源部分与主电路(DSP+FPGA)部分是分开的。此外,相同电路相同结构的前一批次系统也未出现这种异常现象,只是前一批次的系统没有1553B总线接口而已。 根据C6203B的数据手册,-XWE/-XWAIT是一个双功能引脚,当XBUS工作在异步I/O或同步FIFO模式时,是“写外设”使能输出信号,即:-XWE;当XBUS工作在同步主机主模式时,是“主设备”(即DSP)处于等待状态的输出指示信号,即-XWAIT。当XBUS工作在同步主机从模式或异步主机(从)模式时,该引脚不用或无定义。但不管是-XWE还是-XWAIT,加电复位后正常应该为高电平。由此可以推断,异常现象是加电复位后DSP的XBUS进入一个错误的工作模式,例如同步主机从模式或异步主机(从)模式。 在我们的系统中,XD 是TI要求正常配置XBUS总线的,同时TI要求处理了与XBUS主机口的相关信号,禁止主机口功能的。因此唯一可能是:DSP复位加载硬件配置时,与XBUS工作模式配置相关的某个引脚上出现毛刺干扰导致配置出错,例如:由于HMOD(XD11)=“0”(20K下拉电阻),正常时主机口是异步模式,毛刺干扰导致将主机口变为同步模式,或者因XARB(XD10)=“1” (20K上拉电阻),正常时主机口是主模式,毛刺干扰导致将主机口变为从模式。而当主机口是同步从模式或异步从模式时,-XWE/-XWAIT引脚不用是没有功能定义的,也许TI公司是将其作为一个内部测试引脚,根据异常现象推断就是-XRE(或-XOE)的反相信号(或差分负信号)。 还有一种可能是与DSP配置有关的引脚或外部上拉/下拉电阻虚焊引起的,但仔细检查并没有发现问题,而且几块板子不可能出现相同的虚焊点。不过,正是在检查虚焊过程中偶尔发现解决这个问题的办法,就是当异常现象出现后,只要用示波器的探头接触一下“XCLKIN”引脚,-XWE就会恢复正常状态(为高),DSP程序也就能正常写XBUS总线了。XCLKIN是XBUS主机口功能模块的时钟输入信号,不用时做上拉处理的。由此可以得到2种解决办法: 第一种:在XCLKIN的20K上拉电阻处焊一个0.1uF的电容到地。使其在加电复位时有一个延时的上升沿。 第二种,将XCLKIN引到FPGA上,由FPGA程序输出一个时钟信号即可。 由于TI没有提供更多的关于XBUS总线的技术资料,特别是关于内部电路功能模块的结构,因此出现这种异常现象及上述解决办法的技术机理还有待于进一步探讨。 此外,使用的C6203B的硬件(硅片)版本是3.1(C31),在TI的“硅版本3.1勘误表-SPRZ174L”一文中未提到这种情况,是不是该版本的一个BUG? 希望有高手提供更好的技术分析!  
  • 热度 19
    2012-12-13 10:20
    1505 次阅读|
    0 个评论
    在我们的DSP系统中,出现了一种非常奇怪的现象:系统加电复位(冷复位)后,XBUS总线的-XWE/-XWAIT信号一直为低(正常时应为高!),当DSP写XBUS总线时(异步I/O方式,使用-XCE0)没有正常的负脉冲,而在DSP读XBUS总线时(同步FIFO方式,使用-XCE2)却有连续的正脉冲,仔细分析好像是-XRE(或-XOE)的反相信号。导致DSP程序无法将数据写入外部设备。这种异常现象有如下几个特点: (1)不是每次加电都出现,有时异常,有时正常,当系统加电工作时间长一点再关机加电,异常出现的频率较高,达50%左右。 (2)出现异常现象后,人工(按钮)热复位能复位DSP重新加载程序,但异常现象任然存在,不能消除。 (3)与关机开机的时间间隔有关,间隔时间短,异常出现的概率就高。通过分析发现如果关机后3.3V上残留电压大于0.5V就开机,出现异常的概率就较高。 (4)与DSP程序及软件配置无关,清除DSP程序加电也会出现,即加电后-XWE一直为低。只是因无DSP程序,没有读操作也就不会出现连续正脉冲。 (5) 由于我们的系统XBUS是接到FPGA中的,且是内层走线无法断开,因此只能在FPGA中将-XWE的引脚定义去掉使其与FPGA内部逻辑分离,或者将FPGA程序清除。但异常现象任然存在,因此可基本断定与FPGA无关。 (6) 异常现象在几块板子中都出现,有的在常温下出现,有的在低温下出现,出现的概率也不一样,有的高,有的低。 (7) 同样的电路连接及相同批次的器件,在另一个系统中就没有出现这种异常现象,只是该系统是采用2块板叠层结构,电源部分与主电路(DSP+FPGA)部分是分开的。此外,相同电路相同结构的前一批次系统也未出现这种异常现象,只是前一批次的系统没有1553B总线接口而已。 根据C6203B的数据手册,-XWE/-XWAIT是一个双功能引脚,当XBUS工作在异步I/O或同步FIFO模式时,是“写外设”使能输出信号,即:-XWE;当XBUS工作在同步主机主模式时,是“主设备”(即DSP)处于等待状态的输出指示信号,即-XWAIT。当XBUS工作在同步主机从模式或异步主机(从)模式时,该引脚不用或无定义。但不管是-XWE还是-XWAIT,加电复位后正常应该为高电平。由此可以推断,异常现象是加电复位后DSP的XBUS进入一个错误的工作模式,例如同步主机从模式或异步主机(从)模式。 在我们的系统中,XD 是TI要求正常配置XBUS总线的,同时TI要求处理了与XBUS主机口的相关信号,禁止主机口功能的。因此唯一可能是:DSP复位加载硬件配置时,与XBUS工作模式配置相关的某个引脚上出现毛刺干扰导致配置出错,例如:由于HMOD(XD11)=“0”(20K下拉电阻),正常时主机口是异步模式,毛刺干扰导致将主机口变为同步模式,或者因XARB(XD10)=“1” (20K上拉电阻),正常时主机口是主模式,毛刺干扰导致将主机口变为从模式。而当主机口是同步从模式或异步从模式时,-XWE/-XWAIT引脚不用是没有功能定义的,也许TI公司是将其作为一个内部测试引脚,根据异常现象推断就是-XRE(或-XOE)的反相信号(或差分负信号)。 还有一种可能是与DSP配置有关的引脚或外部上拉/下拉电阻虚焊引起的,但仔细检查并没有发现问题,而且几块板子不可能出现相同的虚焊点。不过,正是在检查虚焊过程中偶尔发现解决这个问题的办法,就是当异常现象出现后,只要用示波器的探头接触一下“XCLKIN”引脚,-XWE就会恢复正常状态(为高),DSP程序也就能正常写XBUS总线了。XCLKIN是XBUS主机口功能模块的时钟输入信号,不用时做上拉处理的。由此可以得到2种解决办法: 第一种:在XCLKIN的20K上拉电阻处焊一个0.1uF的电容到地。使其在加电复位时有一个延时的上升沿。 第二种,将XCLKIN引到FPGA上,由FPGA程序输出一个时钟信号即可。 由于TI没有提供更多的关于XBUS总线的技术资料,特别是关于内部电路功能模块的结构,因此出现这种异常现象及上述解决办法的技术机理还有待于进一步探讨。 此外,使用的C6203B的硬件(硅片)版本是3.1(C31),在TI的“硅版本3.1勘误表-SPRZ174L”一文中未提到这种情况,是不是该版本的一个BUG? 希望有高手提供更好的技术分析!  
  • 热度 20
    2010-11-18 22:16
    1430 次阅读|
    1 个评论
    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 ; 否则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...单元的内容。
  • 热度 16
    2010-10-17 13:53
    2179 次阅读|
    0 个评论
    众所周知,TMS320C6203B DSP本身不带UART(RS232)口,在使用C6203B+FPGA的嵌入式系统中要实现UART通信有三种方案可选:  1、用DSP的McBSP(多通道缓冲串口)仿真UART,可参见TI的技术文档SPRA633B,网上也许多文章对此进行了较详细的介绍。但此方案的缺点是大部分模拟仿真工作需软件完成,且UART通信速度较慢(最大几百K)对实时处理系统的速度影响较大。 2、扩充外部专用UART芯片,特别可以利用DSP的SPI口可方便地与SPI-UART专用芯片(如NXP的SC16IS762)相连。此方案的缺点是需更改系统设计,没有充分利用系统现有资源(FPGA)。 3、利用系统中的FPGA实现UART通信,此方案弥补了上述2个方案的缺点。虽然用FPGA实现UART是件很简单的事,但由于C6203B DSP的特殊性,实现起来技术上却存在不少难点: (1)C6203B与FPGA只能用XBUS扩展总线相连,读写FPGA不能使用普通I/O指令,必须使用DMA方式,这样就加大了读写操作的复杂性,调试起来也较麻烦。 (2)FPGA实现UART的免费IP核有很多,比较常见的有LAttice的8250UART、Xilinx的简易UART,以及网上很容易下载到的97版UART(与Xilinx的类似)。但这些IP源代码都要检测 -RD、-WR信号的上升/下降沿,对应DSP的信号为:-XRE、-XWE。由于C6203B的主频达250M,其读写信号的负脉冲宽度只有10ns左右,而UART模块中检测读写信号边沿所用的同步时钟频率即使在115.4K高波特率时才1.83M(115.4Kx16),显然很难正确识别读写信号的边沿,因而导致收发模块无法正常工作。通过对Xilinx的UART模块做适当修改,收发数据就完全正确了。不过在做”PC机发送-DSP接收并回送-PC机接收“试验室时发现:如果PC机一次发送多个字节数据,或者连续发送多个字节数据, PC机接收有时要丢数据。后反复多次试验证明,不是UART模块的问题,而是PC机用的“串口调试助手”的问题,改用一种串口调式工具就可以了。 (3)UART模块约定DSP接收采用中断方式。DSP的外部中断EXT4~7尽管是上升沿起作用,但要求中断脉冲(正脉冲)宽度不能太宽(可能是DSP/BIOS的缘故),而原来的UART接收模块在收到数据后,先将中断信号(即”数据准备好“信号)从”0“-”1“,一直保持”1“,要等DSP读缓冲器数据后,由”-RD“信号将其清”0“。这样做DSP不会响应中断,必须将其改为UART接收模块自己清”0“ (延时1个同步脉冲宽度)才可以。