嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ [/ B* x' V0 D5 D8 b. g! ]/ G3 W
Void UPP_TASK(Void)
9 O) E" A: s. Y2 }% E
{
. z$ k: ]( W& P% S% P/ i
$ L8 Z# ]+ m0 g- o; e1 P# c& b
int i,j,k,target_int_count=2;
; _' R- m+ F8 V! { h
char ch[2];
7 n- S& i; T' Z4 @
" N0 D E# B. v
1 x$ u+ t9 B1 Z- O2 }
, M% B: q- x, r4 k3 w
upp_interrupt_count = 0;
# E9 W3 K8 Y, O. A# M
upp_error_count = 0;
U" O4 l7 k4 q3 q
4 [( w) e( [! U2 u
UARTPuts("\tResetting uPP buffers...\r\n",-2);
( c X4 {' Z; b% {: A3 N/ d3 N
// Initialize data buffers
& e/ P8 _' t1 P% ]; t% t
for (i = 0; i < upp_frame_size; i++)
3 V- F" {# \* ~5 J
{
% f$ Z4 o" t7 g) Q/ a/ a7 B
upp_buffer_b
=i;
' D+ t& O6 J0 E- g5 `
upp_buffer_a
= 0xDEAD;
( ?' O6 U$ l: Z+ _. q" l9 |' K7 R
}
# n' Y9 B7 y# F0 N- t; l) Y
, I* \% M# X8 j- G H
//for(i=0;i<1024;i++)
) j* r3 ^# Q- Y* \6 y
// temp
=0;
# Z, v0 D" \; \4 A$ G0 r, x
% k5 Z4 v n9 {* Z6 k
//UPPReset();
: k: w8 b$ Q3 u) Y! S
/*启动UPP DMA传输*/
' ~- h! d# O6 W7 l$ r W$ Z
UARTPuts("upp_prog_dma_i\n",-2);
4 o. X; T7 o0 M, r. j8 R( Q
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
+ N+ V4 u, M7 z. p
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
u# I6 w5 l! k* Q
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
' o2 B6 l4 O8 j% K
8 R% I& e3 E, q4 V* H7 b& a/ b
UARTPuts("upp_prog_dma_i\n",-2);
% R0 }+ F, ]5 G4 ]6 `$ ]
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
) Z1 B" U/ P1 Z5 i; w _: A* t
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, h0 R f: \. z8 |
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
. q0 G1 e, C5 t4 |! a
% H/ K1 x9 `! p% ~1 i8 N5 h6 y
/*等待UPP传输完毕*/
9 Y5 `3 v( O' G' e x* i3 q) Z7 A
//i=0;
) F- R$ P- o" P: F" n7 l
//j=0;
0 p4 b2 _& {1 R0 ^+ I. D( D
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
. N( q( V+ V! z" q2 i7 r* w
{
: o' S5 b' q. X) |* c( l, J& }
/* 测试UPP传输的同时操作普通DDR数据
9 v$ d2 W8 Z H' R% K
temp
=i;
7 p# O! d8 ~0 p% m
i++;
7 R6 b9 c7 b4 x$ P4 [$ x- t
if(i==1024)
7 N+ o2 J* Z% x q( x
{
5 g: A# z2 z! Q6 L( w
i=0;
# m; z$ c0 M4 Q
j++;
; ^0 `# a, j! ?% M$ ?2 q
}
% q' e% e; k6 {7 M
*/
% a5 |5 o( E( J, X( o; _
0 j/ V, K& k6 z
asm(" nop");
* u1 K) f( G$ h0 y# L A$ x
. E. N2 X' N# H0 d
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
) o. z% m- t7 G# P8 Z
}
5 W: a" [- y5 [! T
5 D4 n' x) K" A8 P. _$ r; t
/*检查UPP传输的数据是否正确 (loopback modes only)*/
/ K- a$ k* W$ A5 h9 v! j
//UARTprintf( "i=%d\n",i);
5 f" k- n8 s1 |! F# l5 P7 k, Q
//UARTprintf( "j=%d\n",j);
4 |3 q' D- l7 O {' o. j$ d
UARTPuts("Data mismatch in buffers.\n",-2);
* I) w' j7 e0 |! L4 Q0 \! ?
if (upp_interrupt_count == 2 && upp_error_count == 0)
* u% |4 ^3 B) j# p! O! R
{
% f I, Y. g! z, K5 [
for (i = 0; i<upp_frame_size; i++)
# e$ P w7 w! v! l' D
{
2 |6 S7 o! e, y A' I# ?0 B
if (upp_buffer_a
!= upp_buffer_b
)
7 o6 q% @/ ~# P6 q, S# Q
{
+ Q8 b) T2 J( u1 _& D+ |6 f
upp_error_count++;
+ N! [6 x, B' H* m% h
}
7 T* {4 {# k- P8 ^+ f V+ I# K
}
# P7 A5 O$ f3 y0 W) ~8 B; S7 X% K
}
* D$ r$ A7 D% r0 V6 h4 r
9 @7 [7 p, D# g [* A( }
/* 报告通信结果*/
4 g3 ~5 t# h9 ]- }9 F0 L% ], Z
if(upp_error_count != 0)
9 j L5 E' C$ W+ c& g2 }0 Y' U
UARTprintf( "upp_error_count=%d\n",upp_error_count);
/ X/ }/ Z& C7 [* h* q$ L
else
% W3 T" u! ]' C! \; \; z2 b( R% ~
UARTPuts("uPP transfers complete!\n",-2);
( C" x+ _7 I: F$ c
* Z {5 i- p: I- }3 X y; ], L) Y
UARTPuts("Do you want to print all the data?(y/n) ",-2);
8 n! s, O, j! [" ^2 l
UARTGets(ch,2);
$ W, k: _* B# ?( \
UARTPuts("\n", -2);
) g) y2 }& {8 c) ?- E8 S3 _3 \0 v
% g4 r6 G2 N" a9 O. d" l
if(ch[0] == 'y')
) w9 F: E- P' C/ B8 ^, C
{
" z7 S4 h5 ?3 q5 B5 w! B( r0 S. F
/*打印全部读到的数据*/
g" p5 |( Q, W$ ^) a, B
for(i=0; i<upp_frame_size; )
+ S8 ?4 O7 h. M9 H" G. t/ L$ P
{
/ W v! x* O4 U+ }
for(j=0; j<5; j++)
; [: ]$ s3 x; x& N" k
{
+ S" B: U" T1 y }! V
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
, y$ L4 ?( K/ e& {5 s* m% O
i++;
3 n7 k& s' M# Q; n7 s' h
//if(i >= 4096)
2 a* b4 [- v( ^' d
// break;
) ^ B3 }& u- c: G/ b
8 n; Z2 F1 H( Z) `$ z+ \# r* N7 \4 I9 w
}
4 }6 s0 B% E/ \: }+ L+ j/ N
UARTPuts("\n",-2);
9 C: D2 C y3 Y' t) E
}
3 J) H& _ `. { U* b" i$ m) w
}
7 X j P" n" c! C
* x0 h; W* m8 f: D
}
1 H1 E; ]* G- R& d* z5 J
/ i. Y/ f" k" ]( q1 \
8 n8 G" b# P+ ]
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
1 u- @0 C( `" ^, O$ ?
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
) z9 \. N f0 R$ s
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4