嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
( R4 m+ [/ O$ s! W
Void UPP_TASK(Void)
( B K0 U1 h7 z+ O
{
. \/ R: R/ m- Z" K# C4 t
9 j9 O! I/ Q5 J4 Y1 l. ]
int i,j,k,target_int_count=2;
) k4 P: h2 Q# m: G$ r9 F
char ch[2];
. H+ w5 j- l* q1 b6 _
5 e8 j* O$ `/ _' B8 `* f
: s" s Z0 Q6 }
: B2 V* b! e& k7 b) p
upp_interrupt_count = 0;
9 D; `( @( X* }( W$ R% l/ X' ^
upp_error_count = 0;
! X# A$ e3 W6 U l
' k1 T! T* z r1 C+ a3 u
UARTPuts("\tResetting uPP buffers...\r\n",-2);
8 M8 U1 j; Q6 ~9 |- Y* V! z0 \
// Initialize data buffers
& V& W! C; W8 s, v' n
for (i = 0; i < upp_frame_size; i++)
( F1 ]% U% K5 g3 `9 ?
{
' C4 p8 H8 I: ?& V# n
upp_buffer_b
=i;
; P; t8 S; T) G! G% _! u+ V
upp_buffer_a
= 0xDEAD;
# G7 ?) K* ~! h1 Q5 l
}
/ r4 r' W% e5 O3 ]% B
0 w& ^6 e7 H# Z1 _. m
//for(i=0;i<1024;i++)
9 G- \6 h- M! p% ?. b& d, S
// temp
=0;
+ Z2 ?7 ^: N$ r; A8 f; O4 [
( X3 M) ?' F, k1 ~5 X) X1 [
//UPPReset();
$ G* u( e) e& P9 k, }
/*启动UPP DMA传输*/
* L- Y, W7 d; ]/ k
UARTPuts("upp_prog_dma_i\n",-2);
, R$ _% q3 r7 @/ h+ }, f# P
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
: g' S$ r( X5 V( {0 X
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) F- |. K1 }% `9 G: x+ l% e
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
+ Y4 C% g3 \% j& A) T+ N
/ R6 j! p4 v& D) R! x
UARTPuts("upp_prog_dma_i\n",-2);
* |- D; O8 w/ ]( v0 ^7 S
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
2 c1 |7 i9 H1 S3 j& {( \
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 T: @5 l# b$ B2 V
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
$ |' |9 D1 n' u# H" X ]0 }
5 m5 G6 Z$ v5 s' \& j4 `
/*等待UPP传输完毕*/
! x7 Q8 o7 K1 R: n2 l
//i=0;
3 z- r2 i. |1 u, I& J& R
//j=0;
' `4 z+ m5 L7 a3 A2 P* M6 U
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
; t1 m) W. i0 u7 P% M; [; i
{
( o! e& i7 }8 s4 N' O- r* J
/* 测试UPP传输的同时操作普通DDR数据
* ] G8 ^( ^3 e P, M
temp
=i;
5 o6 p! \: _( a* K
i++;
$ Z: s3 |0 I* x* i) b$ Z* O l; |
if(i==1024)
0 Y% b1 Q- m/ M/ b& m( \
{
q7 U' g9 f2 H8 Q6 v
i=0;
$ \9 S6 l- P5 i: g6 g2 v& E; m' }+ h
j++;
: X3 Q0 \1 v$ N8 N
}
( L. ^$ P/ ?, O, W* p3 D0 y
*/
4 Q. v) ^- i. x/ g( ]$ p& C; R7 d
5 O* M1 a2 j( X, f6 W5 @8 d
asm(" nop");
. F" Q7 T- r9 o7 x; z
9 N0 ^' e2 @- Z ^9 o; `5 H
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
% e" L( Y- q; Y% p2 V' z* v7 K
}
. ^' U# A7 _1 a3 d: O
/ P/ h2 a* _) p6 P
/*检查UPP传输的数据是否正确 (loopback modes only)*/
7 k; x& b' j p( B
//UARTprintf( "i=%d\n",i);
: G- b8 y0 i( [
//UARTprintf( "j=%d\n",j);
# l' r& U6 q7 ~0 v5 ]
UARTPuts("Data mismatch in buffers.\n",-2);
! k5 g: v. q. n, B8 B
if (upp_interrupt_count == 2 && upp_error_count == 0)
, A" H4 ?: a' G/ o, L
{
+ P) J/ {. |+ e1 |! [( X0 `' d* a
for (i = 0; i<upp_frame_size; i++)
?7 [' h; N+ T7 p8 o* r* }& a6 G
{
: ?1 _# T1 M, r4 [' w6 ?8 u" f" A
if (upp_buffer_a
!= upp_buffer_b
)
0 ]$ G5 L3 C! F8 n$ k, T
{
1 d( y" e+ r% B7 y6 v. V6 H
upp_error_count++;
. Y k1 c: U ^7 ~
}
- m. B! ~; b7 f& b9 P- z7 X
}
0 W/ F; R/ r- B
}
" F4 Y7 F) w2 J: u' J, H# O
* B! e6 ^' u6 e2 f) _ K5 e" E
/* 报告通信结果*/
& G& n. s. V0 t. W6 b# n- i& t
if(upp_error_count != 0)
& ]+ O3 _/ K2 A V; [' t9 i
UARTprintf( "upp_error_count=%d\n",upp_error_count);
; ? V/ @( Z- V. d- ?3 x, V. q
else
! }7 l1 _5 s0 M d& {
UARTPuts("uPP transfers complete!\n",-2);
2 m5 c' R2 \* j. u& n1 e: M9 T
' Q7 \' K, z$ {0 C- h
UARTPuts("Do you want to print all the data?(y/n) ",-2);
; M$ y3 l4 O- R7 k; Q& y
UARTGets(ch,2);
8 u+ \1 @' z7 L3 M4 g, x4 }& e! |
UARTPuts("\n", -2);
- s1 S2 N* c0 s. Y
) u% j# w0 d; i5 s" T
if(ch[0] == 'y')
7 @$ U: O9 _! n3 z! j7 M
{
( P1 g* _' @% L4 M
/*打印全部读到的数据*/
3 A7 a: O! y7 _" Z2 d' `8 J& X
for(i=0; i<upp_frame_size; )
& i8 b* k Q6 r; d& X- ~- i. A
{
$ z% a. X1 A1 W+ i1 _" V
for(j=0; j<5; j++)
% [" l: W( g0 T9 j" a
{
# d( I/ B; d9 m% }& h( k9 O
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
7 v- k; h7 n: i5 E+ H
i++;
& I, v5 Q- m2 [1 {: ^& w& h
//if(i >= 4096)
1 N9 I7 [" {" j! [2 s
// break;
9 @# Q& d; I% e0 M" x* F/ n9 G
+ h* E. X# A' e- h" h
}
% Q7 w' r& f7 L0 H$ S8 c4 X8 F
UARTPuts("\n",-2);
* A4 v& {7 N2 K5 S
}
' p+ O; X7 T1 M. y1 _9 u
}
1 z) k- C% Y4 {+ [# j
9 c. y5 [. Z! Q3 o/ U! k8 x
}
6 E0 D& |5 Y) A- ~+ H2 z
( L( O" } g' s; k( |3 F; s5 O+ p9 t0 P
/ h9 L2 K% a" T
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
5 N: u! c1 K0 ]. N3 U$ {/ K5 A' O
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
( }/ i2 U0 i" W8 S; s! d
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4