嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
+ J6 v! F' q4 O; u& l
Void UPP_TASK(Void)
9 Q% x8 Y8 h: D t0 |. {
{
& L8 z r- M# M# W7 J
( `$ Q/ y6 Z, q+ F
int i,j,k,target_int_count=2;
- l. d) l7 x9 r% C
char ch[2];
1 e( E" [9 K! v, i$ `% g( ?
- F% n% j- o0 ?& _. C2 Y
% n! S$ x1 S9 r7 M1 z* l) K
1 {! x- A/ k( P% i( J$ D
upp_interrupt_count = 0;
0 z) s" _: t; h0 U( |2 v
upp_error_count = 0;
, V! A" R+ }$ X F
! K- S9 X V: V
UARTPuts("\tResetting uPP buffers...\r\n",-2);
; ?! F$ N k1 V7 D2 U: ~5 D
// Initialize data buffers
+ N) j r" K' k% o- I& D) u3 }+ S
for (i = 0; i < upp_frame_size; i++)
' T) E; z# R8 a& S$ \/ g8 i- ^
{
" e# ~) Z3 P4 b( n4 w
upp_buffer_b
=i;
" Q" o% A9 r a6 W. F, n
upp_buffer_a
= 0xDEAD;
R: ^$ G- Z j0 [+ P
}
8 l* [" e. g; x) _+ p
( ^8 G: D+ p3 i3 _6 r2 r
//for(i=0;i<1024;i++)
1 U4 \/ r# Z6 y7 U, R
// temp
=0;
3 q1 ], J, S& ^9 P
- }0 P) G+ N s) ~1 j" a( e
//UPPReset();
/ H( r% K) y3 K3 r
/*启动UPP DMA传输*/
* i, }8 M1 y) n! f2 N- b, n& L
UARTPuts("upp_prog_dma_i\n",-2);
9 v5 a `' p& u+ e
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
( [! x# t- ]) [" T
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: ^* X- z1 G, i/ z
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
( E! M0 O4 ?4 L! k6 q' w* n+ B, n
6 B6 l, q& y2 \# e
UARTPuts("upp_prog_dma_i\n",-2);
2 k9 |9 Y+ C( z$ K
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
+ I" ~: G; N8 P8 L, g
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: W0 i; `/ m- D
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
4 z1 z! B: I. ^. ^. d N# [6 j/ L
; F. r' W+ q( p1 ] J5 H; d
/*等待UPP传输完毕*/
I8 l5 W2 C% o+ r& e5 ^
//i=0;
+ l: c, i% V7 Y/ [4 ~7 E0 ?
//j=0;
" _ r0 Z6 n5 F6 u/ @
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
& o5 S8 X4 i; H, U
{
1 z ~- f9 B4 C6 ~2 L9 t' [
/* 测试UPP传输的同时操作普通DDR数据
4 U. f6 n: T) Y' _/ c- f
temp
=i;
6 `( U9 S% ]7 Y# n* V) {3 U
i++;
& Q" K; I- {1 q& e/ v; S0 l- E
if(i==1024)
|2 b: w8 z6 z; q
{
2 ^3 ^+ E- E. K4 k
i=0;
- [& j* ]3 |, ~5 h( m/ |
j++;
7 { \* C% {$ d+ w+ |4 o! G
}
# h5 S* q5 ~' t% \; N6 N
*/
& M: m+ c! i ~+ l* D1 Z
$ F* s3 r; p4 o! D
asm(" nop");
: ~6 Z/ A5 ]0 C
" w, q" g i& ^3 Y
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
" R) M# P' y1 W3 b' N4 b" `
}
' ^" j D) Q1 R0 P
& E, J# O: |# r5 g. o- X6 o
/*检查UPP传输的数据是否正确 (loopback modes only)*/
* I: i3 M0 q- K; Y. U/ _
//UARTprintf( "i=%d\n",i);
9 J' h6 ?- R5 n
//UARTprintf( "j=%d\n",j);
5 g$ c/ M# R/ f5 x2 @0 p5 K
UARTPuts("Data mismatch in buffers.\n",-2);
# z0 t. c( M: L' s' j$ Z5 f
if (upp_interrupt_count == 2 && upp_error_count == 0)
7 J" u G8 }3 S2 V
{
" F! t+ G$ ~* k
for (i = 0; i<upp_frame_size; i++)
9 C6 i$ n" {6 s# c t+ [
{
' {* Y. ?$ h$ U, ~2 S
if (upp_buffer_a
!= upp_buffer_b
)
* @& L) _, P1 _1 f/ u
{
* b0 A$ G# \+ U! R$ O0 c3 d0 _6 I
upp_error_count++;
. G" ^/ S* Q) n
}
/ s) ~" P+ V( d" o. |) o+ {4 {! S
}
Y8 X- R! m& s
}
5 n8 v- x$ V" s- J4 Q
' `: U2 ~! T' l
/* 报告通信结果*/
; {6 d- p- \# o! Y. J) a* Q
if(upp_error_count != 0)
" ^" I6 @) i. p& H
UARTprintf( "upp_error_count=%d\n",upp_error_count);
% m4 H2 Y$ U+ r ^% I% h' u
else
' m( }: ]( I% a+ t0 d. H
UARTPuts("uPP transfers complete!\n",-2);
, _1 C/ u* z% P% w
, o5 w1 P! a, j8 l, j, l1 A: g
UARTPuts("Do you want to print all the data?(y/n) ",-2);
5 q- t" u: [0 B) f
UARTGets(ch,2);
- ~: `% ?7 N+ o9 J% X7 i/ p: t) @9 e
UARTPuts("\n", -2);
3 h6 Z# _) _5 v; k" q
8 J9 G; v! w3 S: D
if(ch[0] == 'y')
9 M' Y! @. O( b7 ?1 p
{
/ u( D8 v' }7 ~& X7 F7 }; @6 j% e4 s- a
/*打印全部读到的数据*/
, O) O, U7 T9 i% M; g3 B
for(i=0; i<upp_frame_size; )
! o0 A; v2 u$ z2 f* q) n; u. U( e
{
7 g0 X! }! K( Y
for(j=0; j<5; j++)
3 |" f D5 c/ W( B- K
{
7 K" S G8 x+ u V" i
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
8 I$ `0 l. A# V
i++;
+ X* G- a# D6 |# c7 |9 k, L/ f% I& K
//if(i >= 4096)
2 @' K l- {% l( s- V; ~
// break;
5 ^# \$ H9 K, H: e2 [7 N
4 k' a8 v0 g0 J9 O9 C
}
7 }- {$ [& Q0 B. I1 j: i. z
UARTPuts("\n",-2);
3 U% {* I' d& `; H# X2 S
}
4 o( r' @# U5 z/ w. P
}
0 l+ a5 l! }7 L* r4 R, `
7 q2 n P# n+ R' y6 v# \
}
; u, |+ G7 g3 j# k" n- M! j& B6 E
9 W. a/ R& ?5 M9 F
- H4 I7 ~$ N: y
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
& k1 @. Q* u% n( p `' ?
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
- l6 K+ G1 i* O/ j( J& i
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4