嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% x; ?/ L. s" p( Z5 d
Void UPP_TASK(Void)
9 Z1 h0 G7 g! ^, W8 t
{
8 T! @! W9 \1 r: D( `
# ]2 f! K) u7 f+ D0 E1 Z' O
int i,j,k,target_int_count=2;
2 w) F9 I& o2 r$ J& y
char ch[2];
, g3 v. |* q% l: g/ q* B$ s! P
- I0 c0 N' \8 c+ `1 H! x
3 { l' Y1 g' a; e
8 h1 }$ S2 t( t& l
upp_interrupt_count = 0;
" H; E8 F$ R! s% y. \% ~2 a) C0 d% @
upp_error_count = 0;
Y& p. h) y( G) i6 F" u; b
2 C: K7 r* \% |( i1 F5 j7 N
UARTPuts("\tResetting uPP buffers...\r\n",-2);
) c- [( L8 ^7 y# S, G3 R
// Initialize data buffers
4 U- I6 y4 Y+ E8 h; a" l
for (i = 0; i < upp_frame_size; i++)
" B* W: s7 n9 W/ F, `- T8 b0 ~2 v/ Y
{
% n4 T3 l! d: x& q
upp_buffer_b
=i;
4 e! c; E, \% _ F; a$ ~
upp_buffer_a
= 0xDEAD;
) z- `& M3 a0 Y/ Y! ]
}
0 T& R) p8 }; ~8 y1 z. x5 j
% s- y& X' t4 E; E& m
//for(i=0;i<1024;i++)
5 v- L8 ~1 A3 A5 N" J# P
// temp
=0;
: @6 i" E3 i5 V; l% ]# k
8 I+ G' M: B( j/ p4 n) @! [
//UPPReset();
% ]" y, j6 E6 `$ s/ M
/*启动UPP DMA传输*/
/ o- d! s6 ? {0 \+ \' j
UARTPuts("upp_prog_dma_i\n",-2);
8 A% D" W2 y% ]( s! R
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
, V5 g' a5 ^0 [& \
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! ~, j0 r& c7 J8 P& e
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
! l" R, I- V" f9 W) H
+ h$ J6 O) o1 c2 X9 }
UARTPuts("upp_prog_dma_i\n",-2);
! T+ O$ M% j6 B5 T6 S: r6 H
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
2 s2 w+ Q+ E1 `! X
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: w3 Q* A6 @' H. k
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
/ ~; n# i/ l8 A4 R
& j |0 u+ V; j4 _
/*等待UPP传输完毕*/
7 ^ G# r2 ~- e& T3 N; Y
//i=0;
# }9 ^) r: ^3 a" ]- r9 ^9 O
//j=0;
* w6 L% V' j9 b8 L3 p `
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
$ f- S5 k$ Z: I
{
' d7 e4 S; K) w- ?3 E! {- p5 c% B
/* 测试UPP传输的同时操作普通DDR数据
) }1 e6 M n* t" N, d e$ V
temp
=i;
! w/ Q7 ~$ h) t: _
i++;
: q% p2 i& r3 q. C9 M
if(i==1024)
0 f/ @, z' o2 U; m5 `. N
{
9 x( k7 W" W; E" A2 ~
i=0;
& y8 a' m: ?: F5 l4 ~
j++;
! ]& J. I0 w4 _3 H; g
}
, f2 L' u4 i- \7 o
*/
# i0 q7 N2 A/ e; _+ G% u
" P S; \1 | t8 z2 d2 r
asm(" nop");
$ N$ Y; u. N+ ^8 s' b! Z
. V+ G% o% x; @7 O! m3 [& \
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
7 p% ~1 n. C- `& U, r% h
}
6 t6 }, d; i3 x0 g6 J+ J3 L/ j3 @5 S {
) A* y* ]$ A5 ?; U2 V. P
/*检查UPP传输的数据是否正确 (loopback modes only)*/
5 }0 k: y5 w' o1 Q5 Q3 Q* w- v
//UARTprintf( "i=%d\n",i);
4 d+ s ^4 U7 X! j' t+ r
//UARTprintf( "j=%d\n",j);
3 F# d1 r; x$ |& ~5 Z9 O
UARTPuts("Data mismatch in buffers.\n",-2);
/ i% \5 j, A8 E3 b3 {# X3 \- V
if (upp_interrupt_count == 2 && upp_error_count == 0)
( O( B7 W2 ~1 x
{
1 f. r0 k- {: b# U" x
for (i = 0; i<upp_frame_size; i++)
" h, v+ ~. @( A" V
{
& X. M' K! \, E R5 C
if (upp_buffer_a
!= upp_buffer_b
)
; v( B G6 S$ K" W1 A, ^+ X2 }
{
. K7 _5 U" T' k" G; P! k' C$ ?( J! a
upp_error_count++;
7 R6 @/ ~$ c y% A6 m8 u
}
9 `& E' \2 p/ J) M/ `% \8 L4 f
}
8 `# w# |0 a1 o- }9 M7 x& d- n
}
3 |6 _# |# k" {/ {! S p
! j. b1 X* c" P
/* 报告通信结果*/
0 \# Q, ^1 F2 }& ]
if(upp_error_count != 0)
! D L' f0 _) x
UARTprintf( "upp_error_count=%d\n",upp_error_count);
5 t: X/ G" Y% C9 d
else
' ~, T6 O% l& b
UARTPuts("uPP transfers complete!\n",-2);
4 @! X7 {, I# E% h Q
) E* B0 V& K, m3 ]
UARTPuts("Do you want to print all the data?(y/n) ",-2);
& A: t8 W4 U a. Q9 w; u8 ?
UARTGets(ch,2);
9 ?: d4 f; p% V6 R) H8 ]5 K
UARTPuts("\n", -2);
/ Q) O* L& X! h$ V5 _; n) H
; i) g- K; c% C
if(ch[0] == 'y')
- d. I6 I0 ]$ O9 ]; l
{
* m l1 v) j$ x2 p' g# w
/*打印全部读到的数据*/
: R9 ~% y! u7 }8 X4 Q
for(i=0; i<upp_frame_size; )
* R5 P$ f; ]2 m7 R1 _
{
4 t; ]- f5 P/ J8 r9 T6 [5 B0 ?
for(j=0; j<5; j++)
- o [0 d5 d$ G; I( G" ?5 D' d
{
1 T8 x2 y4 y' C& w2 p
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
0 G+ @, n" u# v3 P( X9 b' Q* t
i++;
6 _' k) S, z& h X" H3 F9 {2 r
//if(i >= 4096)
+ i' o. k; Q* e6 K
// break;
P8 _' f$ L8 @" F* @7 Q G
; n5 S5 A' R5 w, w o' o+ u3 G4 @
}
# z: U) w! `7 J9 s" A, B
UARTPuts("\n",-2);
. Q) R# N( i- P4 I0 m/ i
}
0 D# z) A. }$ U/ f
}
3 O% R! y: F" V: [/ t% g8 P
- W0 W7 h2 O# o2 x- Q
}
5 j6 J1 Y/ A6 ^- n1 @4 e
$ ?3 L7 G S8 q) t8 a
8 n% G1 m) q% {* A7 m
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
% E- Z( @& L. j1 K$ l
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
; Q- V, z9 i' o5 K7 Z+ M2 D% z
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4