嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
7 d% a" ~0 P+ K2 H+ B# I9 V0 `4 l
Void UPP_TASK(Void)
+ I2 {+ \) t+ @
{
' }. b' R- D& X& e8 m
$ T2 O" N' i& N: ?; p
int i,j,k,target_int_count=2;
~+ k9 E$ d5 y4 G0 ~
char ch[2];
4 c( }6 |3 x ]* w& _3 [ o4 }
" ]6 \& F, [1 ~. u7 c o
) [3 v' z( X) @ R4 B( n3 D( ^! _
2 _! L8 i& Q& L3 ^( g) K" s
upp_interrupt_count = 0;
5 m/ J( |" P' r
upp_error_count = 0;
6 e' B3 H$ I4 R* ^/ [/ l6 J& i
- h3 e7 h/ ~+ e- j4 w2 v
UARTPuts("\tResetting uPP buffers...\r\n",-2);
7 `' A0 J: ~/ C& u4 O
// Initialize data buffers
' i# v k) s. _. q6 {) B+ B
for (i = 0; i < upp_frame_size; i++)
1 ]4 G- r# w. v3 i. Z# l. l/ C
{
7 c9 \% O2 E6 Q: D8 K k5 @
upp_buffer_b
=i;
" Q$ v7 [8 C7 T: h+ T. R; t
upp_buffer_a
= 0xDEAD;
( ]$ I% a4 o+ l6 Y
}
) y0 ~9 }( a8 V/ G( H l p2 C
0 C& q: W. \+ f ~
//for(i=0;i<1024;i++)
* v2 a+ s# { a. I
// temp
=0;
# p9 m+ ` u8 C
: f0 C% } j) O/ N+ R- _
//UPPReset();
" S: P- S2 ?+ j) z$ x
/*启动UPP DMA传输*/
/ i) w% _6 `5 n$ I7 P- M% |
UARTPuts("upp_prog_dma_i\n",-2);
- F0 U: A7 o6 C5 D
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
6 d y* j' d! y& R
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 U2 I9 W5 j0 n8 L; `
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% s0 Y/ [- C. k5 I5 b% n
s' R# g, H$ q3 Z3 u
UARTPuts("upp_prog_dma_i\n",-2);
* G; f1 v2 g6 p/ Q" A: ^. u
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
8 K$ `3 ~7 r1 P% j" U
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' N8 p' u& x& @& v
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
* x: _+ i3 z8 O( H
7 k! v5 @! B7 O4 x# W o4 D
/*等待UPP传输完毕*/
8 } c y6 r' R3 l; r
//i=0;
0 Q, U2 U1 E: _6 k
//j=0;
$ Z: H, @- W- i
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
( A, w8 M3 H8 g2 T3 M0 a% Y, W
{
4 A$ i* p* Y7 v- |9 T
/* 测试UPP传输的同时操作普通DDR数据
+ w6 ]8 `5 ~: N m* Q/ r+ Z3 M
temp
=i;
" N6 L1 K2 Z9 N/ c p( c
i++;
) s; p7 P K( X* w6 Z% b) b
if(i==1024)
4 ~( R( z. x. @+ E% R6 m
{
" q1 p# I% u d$ a
i=0;
8 p C% x" v9 w0 C. ~: Z
j++;
0 M; M$ Z7 O! V6 [
}
0 ^% t9 [6 V/ f2 T6 j, k
*/
1 L7 E- K- U" B5 {- c
. I: O0 R0 l9 m; Q
asm(" nop");
' E/ u/ D- n9 M+ z) O5 B
$ B9 ~6 o# r3 t# B% P
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
3 _! t/ [0 d, n& l
}
/ V9 h# C! h# a* |/ r5 E6 i* `
1 s9 O6 d9 e" } n9 P- e; p8 I
/*检查UPP传输的数据是否正确 (loopback modes only)*/
' W# }5 t' D6 E7 J6 F
//UARTprintf( "i=%d\n",i);
# r7 o' P; `3 a4 r. l9 I
//UARTprintf( "j=%d\n",j);
: R4 M. N* p7 }: Q8 x# X
UARTPuts("Data mismatch in buffers.\n",-2);
6 N9 o0 r9 b. n+ \9 ?
if (upp_interrupt_count == 2 && upp_error_count == 0)
$ B! H) i: C; K" L$ l/ @: F
{
1 G* ?3 V* t' N6 Z: W( H6 p8 O
for (i = 0; i<upp_frame_size; i++)
" C- M$ C% V7 h; g. q7 p8 c5 i
{
$ _2 l% w% e, _0 C+ @
if (upp_buffer_a
!= upp_buffer_b
)
' c) ?. ^* k; r" W6 Z
{
6 [; e, C% Y: b/ t! r1 d2 B
upp_error_count++;
% a% X% y; h& s, {& i$ \
}
0 F$ l+ m# i8 Q- y" E( c
}
' o5 T; h2 s4 G& g5 k; o( A5 d2 N3 K
}
, ^' `" f& ^) E- h
; k9 k" @. Z6 q9 Y( r
/* 报告通信结果*/
' ~5 V( k" A, n
if(upp_error_count != 0)
8 D4 U+ `2 i0 t- n# M/ m
UARTprintf( "upp_error_count=%d\n",upp_error_count);
6 c+ g( X% Z% [0 C
else
, R: M4 W2 l. @ f* Z, B# ?
UARTPuts("uPP transfers complete!\n",-2);
! x8 k& f# Z( ? d1 P! f
! n9 l* X$ S: ?9 w, @) ^* ?7 g
UARTPuts("Do you want to print all the data?(y/n) ",-2);
7 r a- J3 S+ U5 b- ]
UARTGets(ch,2);
8 m/ M! ]" o8 ]) y8 A. J- Z
UARTPuts("\n", -2);
% g3 C5 c/ u: ?; Q6 Q- C, p
) |, G& c1 p% K
if(ch[0] == 'y')
' F% I* y6 ]* N+ N4 Z6 ]% V5 P! u
{
- q$ a3 @ [/ i
/*打印全部读到的数据*/
5 ~8 N- v+ G d( s! [$ ]. J+ v: d
for(i=0; i<upp_frame_size; )
0 o# a. k) Y( l8 X' q
{
; F* f: y; D& b3 ?. I& T" V4 H) V T+ Y
for(j=0; j<5; j++)
) o& a6 s. \) o3 p _' I: v
{
; {6 d- k6 y+ |- f0 o
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
& [: s5 s$ J- m6 T
i++;
# U# G$ @: k' s: K7 i
//if(i >= 4096)
& T b: P% w" r& i. f; w, i
// break;
4 Z& u4 j* L& {2 v$ @0 k$ P, P
6 n+ |, S* C" q% w
}
9 f3 |9 j) t/ \5 a/ ~2 X- \+ o+ J
UARTPuts("\n",-2);
; ], t- ]% M" O, U
}
; ~7 r6 U8 a r/ @
}
0 V, S! t' `0 C j8 F
$ `( u" Z' P% a
}
( j& Q1 H, I- F% y. T
3 \2 g, j+ u$ ?: i1 |" z
- g6 d: p/ n6 _# E" d' L
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
* |2 s' P9 N3 ~9 k( {8 E' i% [
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
0 U7 i* X! [4 U" u- b# h* m
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4