嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% G2 x9 t6 ^! l
Void UPP_TASK(Void)
0 u8 V0 j. x `! C0 Q! T2 i
{
+ O a/ x ?+ V/ c3 i8 Y" m+ x
$ T J1 f% A, C0 @
int i,j,k,target_int_count=2;
6 C7 ]% W5 i8 L; l+ |8 m# n
char ch[2];
( }" _/ ^! P( p0 p, J0 C+ X8 w8 _
; J9 n/ t: w" S9 M' S* E* S
8 H' k. Z) u% |- e3 \
! s1 {; v2 F* H) a! |) D0 I
upp_interrupt_count = 0;
f$ V# e0 g; X0 s- k
upp_error_count = 0;
" O f" N5 I/ m: n9 G
0 z. m7 {7 j- Q8 g
UARTPuts("\tResetting uPP buffers...\r\n",-2);
$ x6 @' `* i5 g$ d' b+ y4 v/ D
// Initialize data buffers
6 f% v: ~$ W* l$ \
for (i = 0; i < upp_frame_size; i++)
4 B7 P/ g0 K' B3 ?& N7 h
{
; R! ]( U0 i4 O* s, k
upp_buffer_b
=i;
6 W/ E, j6 n3 ^! B/ v
upp_buffer_a
= 0xDEAD;
; A6 p7 [. \1 F6 m. C- ]* f) l
}
' `( t S# v8 p/ i. d+ L
* t+ M# m; B' z8 N) Z( }( y7 ?( M0 Y
//for(i=0;i<1024;i++)
6 q; B |5 t% a N- O- m6 d ^. I% `
// temp
=0;
1 u, T" L; \3 H3 x, F- m, Q
, Q( _- R( i+ |, [. ^
//UPPReset();
9 ^/ A5 L9 n1 G4 o; X* M
/*启动UPP DMA传输*/
6 K0 G* E% h- x
UARTPuts("upp_prog_dma_i\n",-2);
D- w$ y4 \! |9 l X
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
3 }. u6 _4 k/ X" v5 c7 y
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, I1 n6 Q7 F* F$ o) \( |" T
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
* Q0 S2 K+ S! r6 E, I/ h- @; p2 v7 _
+ D) w- X: F) j) {
UARTPuts("upp_prog_dma_i\n",-2);
& o. s. [0 _: d' Y, x* p0 Q5 I( a
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
' I- Z7 @* k3 @# a) G
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 e% Y: J I+ G6 q
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
, M+ [' y2 b$ w" ]& C' m
- Z; d/ `8 B/ X* g+ J1 x
/*等待UPP传输完毕*/
# u- y1 @. K" p- p6 S: c. L; F- K
//i=0;
1 z$ }" \# v" f: t; S& h( ^, |
//j=0;
9 s+ H; G) [* d
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
% \8 l$ E' U) |, J( {0 B ?
{
' Q! l5 L- m4 Z* t! L
/* 测试UPP传输的同时操作普通DDR数据
2 b8 H5 x. d% r6 ~3 K [) t
temp
=i;
& C- F9 E: i) @9 t) ^% n4 t
i++;
5 m, D0 X) f. O% O6 Z! _ H, n
if(i==1024)
, m. I/ c# c1 T F6 ^
{
/ u3 o, e5 N# I4 _
i=0;
* `& s$ a+ C8 v( m \. m
j++;
3 m4 u+ p! q0 h
}
" E! G7 m3 o- ^+ y
*/
. n& I7 _. _, n
0 w: R+ r& @8 u c
asm(" nop");
; \" F- g- B+ z& k% K
* O0 X& r# T5 [# Q5 g! P
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
! d" O- d) \' a' n
}
9 S, f8 u8 B: D" h+ Q7 X
. c, h! {& L! l& u1 R$ [
/*检查UPP传输的数据是否正确 (loopback modes only)*/
7 \( l$ t! A3 V9 f. B
//UARTprintf( "i=%d\n",i);
+ W& g: y9 M& G2 o/ N: f8 X& _
//UARTprintf( "j=%d\n",j);
+ c9 h' d' f" c9 l' [( O
UARTPuts("Data mismatch in buffers.\n",-2);
, F) p( ^! o9 ~
if (upp_interrupt_count == 2 && upp_error_count == 0)
* ?# f: Y, m8 S" ?" | w2 i1 p
{
. C4 C4 ^* Q) U5 V
for (i = 0; i<upp_frame_size; i++)
9 V/ @) [* ?( n2 E2 r
{
2 F+ q& c! c0 {/ o+ }3 Q
if (upp_buffer_a
!= upp_buffer_b
)
2 |; L& b E' G% u# G& j
{
; k- K- Z. y! A6 @8 O5 E* K
upp_error_count++;
' H+ |! | Y! F: U9 [& h/ K' H/ ~
}
1 B( E2 u" ?( q) ? r5 K/ B
}
4 T4 B+ i5 ~, B! E% t& Y& R8 H
}
* K0 u( y- W6 p1 w. ]
1 @; n; f1 p6 U/ P$ k) Z
/* 报告通信结果*/
3 f$ j. ]+ h8 j8 Y4 B6 w7 k7 B
if(upp_error_count != 0)
" ^9 G. D0 k, I, E
UARTprintf( "upp_error_count=%d\n",upp_error_count);
9 p' O9 D3 k4 ], V1 i
else
$ N% l J. }5 n. \
UARTPuts("uPP transfers complete!\n",-2);
I5 P5 ]+ n/ r. u- t# l" y
' I4 s! C/ R) Y7 S: I: }0 C
UARTPuts("Do you want to print all the data?(y/n) ",-2);
: r( r o9 D5 Q$ r) ?- q* `
UARTGets(ch,2);
8 k& Y9 a6 a8 h6 N
UARTPuts("\n", -2);
! i6 `: G) _0 J% @0 G5 l/ K4 E! v
- R D2 @# @, Y3 H: S
if(ch[0] == 'y')
. ?4 W3 ~9 g: M0 ~
{
+ @3 _2 c+ m; B# I
/*打印全部读到的数据*/
! {% l! N% z' w& Q, a7 |) C' B
for(i=0; i<upp_frame_size; )
e' L3 ?+ b6 e/ V
{
& [4 {: |/ Q: v; @
for(j=0; j<5; j++)
1 i- M) R* T9 T3 I# X& s
{
8 `, {8 S. F( v _9 p& a& N
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
! X% B4 P7 K7 V! x
i++;
9 Z, d, R6 M: _0 s0 X& k/ Y
//if(i >= 4096)
# t- x) n' E* U% b/ [
// break;
* ]/ R5 ^& k4 @$ k R
# v: ~# n" t) ]( J
}
" c. s0 `2 J4 s/ d, N
UARTPuts("\n",-2);
; p F1 W3 G" \+ }! W
}
+ U" M" u4 Y( s+ w
}
& Q3 ]5 j' T5 ]- A$ v( y
6 I. \, C& f6 e
}
0 W. `) ?' M! Z! X
+ L3 [& ]1 x+ ]7 `0 @
7 ?0 a4 d1 p. t9 ^' n
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
8 @+ \. l& N, Y: {1 P' q
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
4 ^) e- F5 n' [
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4