|
程序upp通讯部分是从demo中uPP_B_TO_A移植过来。/ B+ v1 N$ r: w3 X5 w) f
+ @8 r: O( y( {
1.linux系统下由arm控制dsp通过upp往fpga发送数据,程序运行过程中,开始upp数据传输接受正常。7 ^0 p; u! |* L7 B# _% f' `4 J
1 W# `$ M' i4 ^1 K2.由arm控制dsp不停的启动,停止upp数据发送;在某一次发送时出现数据错位(通过fpga从数据总线抓取数据),然后fpga接受的数据都是错位的,重新加载dsp程序也无法恢复fpga接收正常数据,重启上电L138后再运行dsp程序upp的数据恢复正常。
$ z9 V, P/ F* [, t4 o( A5 g4 Q8 t% B
3.通过dlb寄存器进行BA回环发现错误的数据情况如下(与通过fpga从数据总线抓取数据一致):发送缓冲的数据顺序是1~128,但是回环到A通道,收到的数据是64~127,0~63。在测试过程中仿真器查看到UPQD0-2的值跟正常时一样,发送区数据顺序正确(在调试过程中查看寄存器及发送区地址,发送区是8字节对齐的,寄存器值没有发现异常) 。经过一段时间的测试,发现不是数据错位,而是0-63的数据是上次发送的值,二64-127的数据是本次的值。每次错误的字节数不一致,有时是前面112个数据都是上次的,有时只有16个数据是上次,64是最多的情况。
5 w0 w& U% }' r6 P5 S/ [$ h, }" i" e- q' m% f. \' ~
4.upp发送数据是通过fpga给dsp的gpio发送周期40us的方波,但是dsp以40us的间隔在gpio中断处理程序中往fpga送1行512字节的数据;
; F3 N, @) v8 V$ z9 n- Q( _; y8 Y @/ L2 t2 W
; k, q \) z; d- t
附:发送时钟设置为37.5M,传输为b通道16bit传输,实际测量upp发送的enable信号持续大概7us;中间fpga没送wait信号;UPTCR的发送设为64和256都试过,结果都会出现错位。
! b. s( c5 _: g3 s9 Y部分定义如下+ h+ R& A% z& H4 Y
#define upp_line_size (128)
' D; z) H& m: m ]#define upp_line_count_s (1)
6 P: u1 e3 T; E4 T! m5 w#define upp_line_count_r (1)/ v6 U9 }4 y0 M8 ]4 }, L5 ?7 ?. ^9 {
#define upp_frame_size_s (upp_line_size * upp_line_count_s)
/ C& |5 Q5 @+ x" N2 _- P z#define upp_frame_size_r (upp_line_size * upp_line_count_r)
" o) b" ^$ t. Z: L#define upp_line_offset_s (upp_line_size)1 Q8 }" H, U7 X" J' J5 u
#define upp_line_offset_r (upp_line_size)
7 ]' U6 L+ c! L7 c3 m+ `5 }* b' X
& s1 Q% N5 B& v/ B- ^#pragma DATA_ALIGN(upp_buffer_s, 8)
1 A- S. [9 O F) }7 w1 Q6 F#pragma DATA_ALIGN(upp_buffer_r, 8)- Q3 x% ?& V) Z! y3 `* f
volatile Uint32 upp_buffer_s[upp_frame_size_s];" b" l7 t a- _4 u5 y5 `) v
volatile Uint32 upp_buffer_r[upp_frame_size_s];, n7 L6 p. [8 X7 |0 K m* o
4 t8 ^" G" G$ L& ^& b0 }) t d+ V请教:这可能是出现什么问题了。$ t/ r+ \2 y8 F, d/ e, [
3 @! q+ A% \0 F0 A6 S
|
|