嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
9 N) R7 L1 n% f5 b8 h
Void UPP_TASK(Void)
) h' X6 z) L/ x0 L' a
{
: e3 t" q) c7 `4 Z
2 o4 e: u4 C8 l$ I7 n. ~
int i,j,k,target_int_count=2;
" s# x6 z9 i" c$ X6 y
char ch[2];
1 i- [, n% u5 _
3 [9 ~3 m, |8 F, b
C$ L- I. g: g: X5 k
$ l! _1 o7 \, J) D# s/ @! Y
upp_interrupt_count = 0;
- D w2 V" k5 U
upp_error_count = 0;
5 }1 J3 @ o; i( u/ m) r X
% V) r3 c5 z, |, g
UARTPuts("\tResetting uPP buffers...\r\n",-2);
9 m" Q0 ~, ~- k; `/ |, L$ |- r
// Initialize data buffers
4 p$ s, c% i; A2 i
for (i = 0; i < upp_frame_size; i++)
. M" ~0 q2 ^, h
{
j. u) Q3 v2 J( g( Y5 G
upp_buffer_b
=i;
8 V7 v6 v& M0 d
upp_buffer_a
= 0xDEAD;
4 e5 B$ n% T) e4 M% q/ |* f
}
% v2 Q8 I& I0 A4 g* s
* C V) v' |: x/ y8 G
//for(i=0;i<1024;i++)
8 R/ m0 U8 W/ @* Q* x: h# D
// temp
=0;
/ \/ R4 h- \2 J3 O. i
$ C ^3 q9 r! E, c: n
//UPPReset();
' h9 O! e( Q7 A2 B/ }2 t. J
/*启动UPP DMA传输*/
& i% {2 P4 k, D5 y8 U |
UARTPuts("upp_prog_dma_i\n",-2);
o3 ~$ f# m9 H) u- ^* ~* H0 q B$ R7 p
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
c/ H) J% C& d, ]- b1 Y8 Z" l' T" _
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- Y; }3 `, z+ |. u
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
# I- d! \5 u" _1 Z) V1 A! V! N% T6 K
: G( k4 _0 n. v9 p- L9 L: ^5 e
UARTPuts("upp_prog_dma_i\n",-2);
) _. T3 s8 @) N( D4 O3 n# s, O; a4 Z
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
) c- l2 F" k3 V$ g% |
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 F% ^) d. G2 v; F/ P
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
# ~' l# @& ]: o7 Q
+ x" h: H5 S9 p f s3 ^; F
/*等待UPP传输完毕*/
& @5 N5 {1 i1 E- g- D/ S9 V
//i=0;
( v2 ?' a: M( L0 x5 q: P# {
//j=0;
2 _" a1 Y+ P4 y* _2 F
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
' }, H1 ?: j8 c+ }2 H
{
& y j6 k0 W0 U
/* 测试UPP传输的同时操作普通DDR数据
7 k+ i$ K+ B/ O; }/ ~% N* [
temp
=i;
, W6 L, x' N1 i& Q) Y
i++;
; M- m, a7 ]) B
if(i==1024)
. Z$ @: u9 a0 z2 k$ f. Q
{
1 }4 g7 ^3 [3 Q! _
i=0;
, Y( s" s# S9 [, [
j++;
; e' M, K3 V* B4 q+ S9 V/ i
}
8 I( V3 M% Z6 p0 z" l0 R* K
*/
l% z% y& Q* |9 g1 M
+ D: b7 T7 S0 k' L' E
asm(" nop");
, g9 T% u. D! u" X) V
& l! r. g5 G: e4 h/ V, k
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
, {$ R9 {- c# {" H0 w
}
2 @' E$ s1 u$ J; g% Z
" T3 S/ B' ^; D' A) V0 {3 M
/*检查UPP传输的数据是否正确 (loopback modes only)*/
$ q5 N! s! c1 M/ j0 q1 p" \
//UARTprintf( "i=%d\n",i);
! O7 E0 Y$ t' e3 z, Z
//UARTprintf( "j=%d\n",j);
8 c" F; u8 }, T
UARTPuts("Data mismatch in buffers.\n",-2);
* _- V! C5 v, ?* G' Q
if (upp_interrupt_count == 2 && upp_error_count == 0)
# v! c& Y9 e9 \! H% }! L
{
: x. ?# t: g5 E
for (i = 0; i<upp_frame_size; i++)
; A! u# z) G& {; O: a1 z( D/ P, E- [
{
& r' q4 }' L X
if (upp_buffer_a
!= upp_buffer_b
)
8 r' D9 Y/ f2 _& l& R# r9 ~
{
/ p5 |1 Z4 r- `6 j% r& \8 Y
upp_error_count++;
' y7 J- @0 ^3 w% Q Y, r) b0 ^
}
s6 e0 G4 p" T9 [, t
}
% G/ Z" |: w; v% c/ K
}
S1 X7 Z1 r1 G% a4 r4 |1 l
$ e: ]3 ?+ ^' M% K
/* 报告通信结果*/
' h0 G m8 @ P
if(upp_error_count != 0)
. R+ f$ t) }2 x9 ^( d
UARTprintf( "upp_error_count=%d\n",upp_error_count);
% R, N7 o8 g3 m3 D2 \. w. B
else
8 R5 o0 A! p1 h# y- h" ]8 c
UARTPuts("uPP transfers complete!\n",-2);
9 m+ d" c5 \% |
/ \7 L7 s+ W5 F( A- R. {
UARTPuts("Do you want to print all the data?(y/n) ",-2);
0 w) `7 g2 P; r0 @4 B* u4 ?, E
UARTGets(ch,2);
1 S7 y4 g* T6 b5 Q
UARTPuts("\n", -2);
0 w+ s b# }( C5 J! s
: x5 \ I5 x* H/ O1 Z
if(ch[0] == 'y')
9 s2 ` _6 J' |
{
* W8 B6 J0 [0 f/ y! s3 T2 D5 S
/*打印全部读到的数据*/
0 D+ ^1 g: L. @7 z% I# S
for(i=0; i<upp_frame_size; )
: X" a( I( ]* t
{
0 J* G6 o }& p5 n. \" |
for(j=0; j<5; j++)
# z8 K+ Z( D( M
{
" Q( e x( s/ A& L# A
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
, z; i5 s5 H% G/ \- _) a
i++;
6 ^4 l/ v8 ?& z
//if(i >= 4096)
. o$ S- I) q$ k: P7 o
// break;
1 A9 t: C9 ^: H! q- M
& {$ K& o" I, M" v
}
4 Z5 ]9 B/ F8 r/ j' G$ P/ k, \( Q
UARTPuts("\n",-2);
" D$ S- i/ c. C2 {* V
}
& w, v/ U* p( _* d |
}
! q. ? ~; X; ?/ B9 N
, p+ v4 x2 B K' Q& P4 o5 e: k
}
; v) E6 m8 f9 t8 i
- l6 s% O% J# r1 ]) u
5 B$ y) {1 p. N( v# M7 @' J: a
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
8 E0 U" i: @( Q" G k& j+ m
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
$ G ~7 {; R0 Y. i q+ a5 Y
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4