嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
6 n. y$ t4 T7 F; P& e
Void UPP_TASK(Void)
1 U6 X' q- b- V F4 W
{
" m2 L3 U7 s" N( Y
2 B$ b+ a0 Q4 V% R% j# _
int i,j,k,target_int_count=2;
- b+ h! S7 O4 R/ Q; N a* D
char ch[2];
7 q$ A3 H2 B/ E
$ L3 R3 ?/ r4 t* w$ c
/ K( m) `, X8 o: p
% j' B& w) q1 x$ j
upp_interrupt_count = 0;
3 B$ ~* }7 f+ C. e; L+ [
upp_error_count = 0;
0 ?9 T& q! d/ W. I" M1 }
4 @" c( A& Z* v4 N
UARTPuts("\tResetting uPP buffers...\r\n",-2);
! D4 w! V0 D; n3 m
// Initialize data buffers
6 J) T3 A: G9 U. j# ^* r8 D
for (i = 0; i < upp_frame_size; i++)
7 A- Z# E9 |# d% z, A
{
( f" c& x1 b7 R! M$ k4 s" o
upp_buffer_b
=i;
K( M7 L) f- _9 t0 Y
upp_buffer_a
= 0xDEAD;
/ F, A! ?3 Z; g- O4 o& r+ C
}
8 L/ H- O, h( c8 O9 x8 k
' ?# w4 ]$ j% m0 V5 W" F2 ?) ^
//for(i=0;i<1024;i++)
9 u/ E% m* K y6 S! U" C* E: w
// temp
=0;
' ~4 C0 r0 [/ i; U
) K8 u: f0 m! F! j ?
//UPPReset();
; g* E5 G6 A* G. W/ E
/*启动UPP DMA传输*/
* S: b A1 r) V6 y" X5 O
UARTPuts("upp_prog_dma_i\n",-2);
8 ~& O" L Z2 y9 b+ i! [6 V
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
, l# R! U/ o0 u' u+ t
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 k% @8 q y& ]
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
+ k9 F( L: j8 H. m+ J! p& n
3 X$ h+ Z' @& D: ?! h9 {
UARTPuts("upp_prog_dma_i\n",-2);
# i1 Y1 Q" L( k& J8 C& w6 \$ {: m
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
0 `+ Z [; I+ f! Z
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 V* ^3 @/ O1 T. E# K
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
* J1 n9 k: j8 n9 G. n8 w( w2 C5 D
) _0 Z/ u8 h3 S+ g3 `( ]3 w7 u
/*等待UPP传输完毕*/
1 C' N. ?5 p8 d
//i=0;
4 J) P: K- S5 d5 t
//j=0;
* w @3 g* ~4 e+ B
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
+ G- j2 I- @8 i+ ]/ E& O$ {. U
{
6 f4 A2 ]; O+ m) E' o
/* 测试UPP传输的同时操作普通DDR数据
' ~3 ^- K7 @- l- `6 _5 ~8 c
temp
=i;
" Y$ B6 b1 P" D2 U
i++;
: V* Z1 r2 o! {
if(i==1024)
3 Q. ` o# m; d1 O/ Y( H( }
{
" l/ u) Y3 G6 p( z- L/ j" _8 z2 j6 ^
i=0;
& T, s& ~9 J0 j f% ^& `' D G6 j
j++;
% S6 \9 \& f6 M& W2 D' o# G# T
}
/ Z& A0 @1 V" q0 D" `
*/
* O0 i% I; \1 i: N# P
/ \; o0 ]+ ]7 L$ v" V1 d' g
asm(" nop");
/ C0 p3 D' H* p: Z1 o6 i J
( O' e' V; P9 G: ^: d1 c
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
- j6 l( a" E& G: M( k
}
. Q3 Q9 a8 l( d. t
. A$ O* ~' }" I0 ^% D4 l3 s$ m; {
/*检查UPP传输的数据是否正确 (loopback modes only)*/
+ W" ~+ U7 V( Y& p" U4 l
//UARTprintf( "i=%d\n",i);
, i/ d" g! T% ^9 w
//UARTprintf( "j=%d\n",j);
; V! v- d2 d! } q8 m
UARTPuts("Data mismatch in buffers.\n",-2);
9 e+ Y5 ]4 P0 h9 k& L; @
if (upp_interrupt_count == 2 && upp_error_count == 0)
4 O. v& v6 b# F/ j$ M9 Z
{
# U2 q' w' B. M. z1 ^
for (i = 0; i<upp_frame_size; i++)
' Y9 x x. L3 {1 C$ u! {9 {( k4 Z
{
3 ~' t7 M' A: H" x6 i6 j& V
if (upp_buffer_a
!= upp_buffer_b
)
- z6 Z6 \* Z! E4 Y$ e3 P2 i- y" ]
{
1 q& c1 w+ I* G8 H: P8 ?) s
upp_error_count++;
u0 K _ K6 l5 v5 [
}
- k" ?: U+ d9 M( O! x" `
}
' z% }7 D( h3 |
}
% F* n, h, g7 l' M6 q* z: d/ f) c
( s, l7 O; G4 ?6 Q8 t4 n7 ?
/* 报告通信结果*/
: f: C9 O# `" m' p) e
if(upp_error_count != 0)
v% `1 p- F7 ^3 z" W
UARTprintf( "upp_error_count=%d\n",upp_error_count);
7 e1 Q! }) J) F5 c7 d
else
' O3 W+ M: y: |- j* f$ f: U/ n/ P
UARTPuts("uPP transfers complete!\n",-2);
5 c) q1 [( e' j
6 W6 v+ @, k* l
UARTPuts("Do you want to print all the data?(y/n) ",-2);
) a* ^) R: h5 H7 @" N( |# k
UARTGets(ch,2);
0 K2 D: I0 h8 W/ n, X: f" K
UARTPuts("\n", -2);
, h7 W7 h: m) ?, [7 @
7 }2 g* Q; O) U8 e
if(ch[0] == 'y')
/ |+ \+ i4 ^, ~! D# G
{
9 ^. z2 h; }; o
/*打印全部读到的数据*/
2 V& S7 Q/ V6 i
for(i=0; i<upp_frame_size; )
6 M/ M3 m. S0 T; m/ T% a, G
{
6 \* O) b! p' z O! Q$ F6 \
for(j=0; j<5; j++)
9 ~- _2 b5 {- p1 M
{
6 f0 L% G$ M0 O/ r+ y4 E0 M
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
2 P& _$ @0 m/ v$ T6 B/ W: J
i++;
( |' c2 f; H, t3 w( `/ [
//if(i >= 4096)
8 w5 }2 c" ]0 \& p- i% I+ L0 G
// break;
8 j6 L) z. @ _. e4 K
# v0 o$ Q0 B7 q0 v" o# k
}
$ Q1 O( X( q/ P
UARTPuts("\n",-2);
8 l) D, r Q2 {' b }. X7 P- F
}
3 C3 x' @( q* J
}
- y! @! u/ @; Y; H, T7 `. G
6 d0 f) y/ i; R6 z o' T; m
}
1 o7 m. E9 R# v6 _4 s& P3 J
, |( R; _9 ^1 K( }( s& |* _* _
5 r+ d- c5 b2 C$ B% x
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
1 {$ K6 m( n% | V8 o. \% v
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
, c! I# w2 W. o
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4