嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% h. |7 h% k9 s: a q! M3 k4 k
Void UPP_TASK(Void)
2 j8 V- \0 W3 P
{
' d4 K% \5 K: ?& a( V% _; N
0 l/ `9 N# o {" h; `
int i,j,k,target_int_count=2;
2 t: j1 w% [5 x8 s
char ch[2];
$ K' W6 Q+ ?) K0 [/ B: s! F n9 e
, m# _( S+ O4 ~
I$ N( j& V% C& \
/ g1 B0 n2 e @, P: A1 p
upp_interrupt_count = 0;
0 h1 p8 s, r; L& [" y$ E6 x
upp_error_count = 0;
& J# {% A2 d9 Z" p+ T+ O5 c3 e' J8 Y
$ T, G) R% x9 K7 F$ x' ?
UARTPuts("\tResetting uPP buffers...\r\n",-2);
9 F' A; }/ c6 I* a' L% u1 n
// Initialize data buffers
$ J) m5 p2 c$ j8 n7 I2 X7 p
for (i = 0; i < upp_frame_size; i++)
4 b5 r+ x8 U/ S
{
8 t% F1 V7 u" U$ F& M
upp_buffer_b
=i;
3 w9 h U' c3 W" t/ O, C1 ^" y
upp_buffer_a
= 0xDEAD;
. w8 y8 z$ V' ~8 G8 z
}
( |1 G r4 p" b0 `* K# @% i6 b9 p
+ y' o* r8 U T9 W5 B# h& {
//for(i=0;i<1024;i++)
' v& h" P6 O" Q8 i/ r0 @& J/ z
// temp
=0;
3 V& G/ n. t/ j2 L _; d" I# S
! r+ a. m- J. n8 H5 L N3 h
//UPPReset();
; E6 b( r9 N; N- ?4 a3 k. l1 s1 |
/*启动UPP DMA传输*/
y; F' k, \) n, ]; |
UARTPuts("upp_prog_dma_i\n",-2);
$ g7 ], \9 x/ s* t% m; { Z9 r) u
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
& v- Q3 R9 \ K0 F2 c0 z! ]
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& E* X6 {% V0 n; p6 m
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
3 i5 Z0 B, v9 Q/ t4 W1 `* R
( ?$ `0 s N0 e3 t3 m* M( k
UARTPuts("upp_prog_dma_i\n",-2);
, i* k/ M# e5 k7 s) X# B$ a* D
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
- ]" F# @. |" F( V* h: H6 @
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ M6 q% M: P: _- |. g1 B, \
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
0 `) J% A/ T* g8 Q! ^4 ^- W. J
$ e) e$ S) m! k3 g* U! z7 l
/*等待UPP传输完毕*/
# e$ }9 U4 R, U8 q) M& n
//i=0;
! b/ S% x/ m$ @; [+ T4 U
//j=0;
5 b- `8 X- _1 ~( P
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
- ~9 V, t6 y/ Q9 ~- g* s% i& [: T
{
2 h6 g1 U* y8 Y0 E! f
/* 测试UPP传输的同时操作普通DDR数据
- I3 L* @/ H7 g/ X: @
temp
=i;
! v. k5 k: b) ^* o6 J$ Y$ V3 w
i++;
; j+ D& v' _4 m. U" G+ z: S4 p
if(i==1024)
2 v+ D( w& U9 C' T
{
; j3 {/ M A& Q8 ]4 D" s
i=0;
2 h3 Q3 [6 Y2 E Z/ y! o
j++;
9 _) X8 E9 h4 k# q& d0 J, ]
}
p% E4 v+ k3 S
*/
4 f3 d) k0 C6 a/ H7 `# r! ]3 U
: a2 L8 Z" m2 x9 O. ]' A
asm(" nop");
( u: |* U4 _! a1 g
# `4 V! A% f" L
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
7 b9 f* N. K: e( A0 c+ l$ i
}
- w; g5 i" z5 t _ U
4 {, [# e+ O1 N! [& l8 m
/*检查UPP传输的数据是否正确 (loopback modes only)*/
) a% V) p7 i; M; W! s* y6 Z# o4 R
//UARTprintf( "i=%d\n",i);
5 [* g9 A% r7 ^8 d/ G
//UARTprintf( "j=%d\n",j);
0 g" G6 x; s; ^! s
UARTPuts("Data mismatch in buffers.\n",-2);
" W% Z0 R4 |& F" `6 c- l z/ i' Q1 b, J
if (upp_interrupt_count == 2 && upp_error_count == 0)
6 Y3 \' x5 h0 \3 R t# u3 T K- z/ k
{
% ^8 m a0 H7 J; w+ W, O! w# e
for (i = 0; i<upp_frame_size; i++)
3 ^% K7 k+ L6 Q; T; [& A3 s0 Z
{
7 Y% q& a. z- k9 T" m, \, k1 S
if (upp_buffer_a
!= upp_buffer_b
)
% V1 ]# p C, W( H' T
{
2 i4 z3 l$ h$ G5 v- S
upp_error_count++;
+ X7 P1 G! g* [. j7 K& ?
}
& G" L7 D3 C6 L) u3 t" I. K
}
/ ]8 b, k0 S- J0 p
}
3 c1 f: `' \7 m- p# L( Z6 v; i
! n' _" T2 n6 D3 o2 Q5 R. x+ r- x
/* 报告通信结果*/
3 ~; H9 B4 N5 b- h! d3 P* M
if(upp_error_count != 0)
- E, U9 Q" ~* q
UARTprintf( "upp_error_count=%d\n",upp_error_count);
$ Z& f# Z% ]: K/ c% D- n. {
else
; r8 y5 M) N, \: t$ y
UARTPuts("uPP transfers complete!\n",-2);
5 B9 L, J# [9 {: O( C" z
' U: U5 e$ \# F4 d. ]( V- O
UARTPuts("Do you want to print all the data?(y/n) ",-2);
0 m+ `. ]! f$ o9 o* _1 Y$ z6 F; o
UARTGets(ch,2);
# [9 m; j0 i% N* y% \. I" O" _
UARTPuts("\n", -2);
8 { B! {5 }( i% o
% X0 m. _1 V* l; E. `! ^
if(ch[0] == 'y')
6 |/ J$ f5 ^( k! I) Z
{
/ i( {# m: x- c
/*打印全部读到的数据*/
2 P$ |, ]! |' d% N1 k/ h
for(i=0; i<upp_frame_size; )
; |5 U& L n# U
{
* Q% t$ [& I+ t6 x* w6 u0 Y& G
for(j=0; j<5; j++)
. Z6 g6 X4 N/ ]
{
! L' D) k/ c4 n7 F* N0 k
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
" K' I. |- c0 o$ A; i
i++;
7 f* B. `& B' z+ O Z+ z7 y- P' S
//if(i >= 4096)
4 k0 r8 \& L D: n) s- c* p% Y
// break;
3 }% H7 f3 o6 z( K1 w, t0 u
9 d1 r, [. `; ~5 _0 F3 _0 d, K
}
( V/ v4 t! m0 Y
UARTPuts("\n",-2);
" H. ~* y T K: e
}
7 J1 k0 ~) L# E2 q- O/ Q* D: D+ w
}
, \0 F* D6 j, P8 @+ E. L
* J. ^) Y6 C' h
}
, @4 u4 _+ l6 D- \7 j, p; n
, p- Q& l" G1 F$ @, o
8 m1 L \7 J' u
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
& u `, |; b( `9 A
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
! U7 Z0 r6 \; B* u, k$ `! m
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4