嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
; w9 W! H* c9 \7 c" R1 g
Void UPP_TASK(Void)
2 A- c! h3 A3 [2 d' T5 G
{
+ U: t* [ z) U- C% i$ K. q
5 Q) [; i! H2 Y2 k: |2 Z4 p! r
int i,j,k,target_int_count=2;
1 { O7 |+ E J) h: z. E
char ch[2];
/ E/ o9 @: u: e U) T, z0 w" c
! P; \+ p% n, N6 q; _* g
. s: R1 `$ H: {0 P
) c- k6 Y) N2 U
upp_interrupt_count = 0;
9 F9 a' v% N8 X' K8 K
upp_error_count = 0;
5 g# k5 I2 o2 y" u# E& d1 @$ n4 q( r
+ I: t: ~$ W3 s W
UARTPuts("\tResetting uPP buffers...\r\n",-2);
) s& m' U( M3 {5 J0 C/ n+ ?
// Initialize data buffers
5 T# `# s: O9 l* P
for (i = 0; i < upp_frame_size; i++)
. s* |+ {) L5 J# p2 W# |% i' z7 K
{
! @) c! A* K5 R1 w. Q
upp_buffer_b
=i;
w! [2 ]) o) H1 I6 ~" h1 b
upp_buffer_a
= 0xDEAD;
/ g' S1 p4 c, |: N' X0 w
}
$ c0 \% x5 v* T! a2 J( }2 O( w
6 T8 T0 p1 e3 \
//for(i=0;i<1024;i++)
P' |( o1 K4 x8 o. o/ }
// temp
=0;
' {9 m' p7 e6 s# U c8 o* I4 N. Q
. l$ h1 } [. ~* u) o' K
//UPPReset();
* Y7 H4 y/ `& ?$ y, ~( E+ k
/*启动UPP DMA传输*/
. H5 x* E3 @8 p3 c
UARTPuts("upp_prog_dma_i\n",-2);
7 G* H/ e% C8 k k
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
( \- a$ u* S1 a
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; {+ r) m+ a* x8 ^: B( [
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
) [' i4 v) D2 N
, m7 \* m" I* m, `( y: Y; n$ M5 l7 w9 l
UARTPuts("upp_prog_dma_i\n",-2);
+ k4 L% T# p. _+ n# a" H) l( M
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
2 J& n& k; R7 J* t \4 u
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, k- ?6 H+ h3 k0 O6 f
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
0 @+ N, ~1 ]" v2 _% k3 i& R) v
1 _3 Q: Y- d: f3 X5 i+ d
/*等待UPP传输完毕*/
$ Q- f8 o" `4 k" O; N. l* t
//i=0;
" R' [" ^9 a! W! y) ~, s; O
//j=0;
, C B+ N8 K7 d1 e! `( a
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
/ i3 \* a: O. X3 ?
{
% T- e; I9 H* p7 B* t
/* 测试UPP传输的同时操作普通DDR数据
! @; ?1 w2 P$ U
temp
=i;
3 A4 `7 G7 A! o* w {$ q
i++;
' _9 [. y: M! w
if(i==1024)
# N/ Q+ W0 C- g0 K4 j/ m
{
: T0 ^- _( a: d' `1 U
i=0;
8 D. N- M) m! q1 ?. x. T, W) a
j++;
9 }( G$ g2 K0 `& ^! Y! W5 U! B! l/ L
}
6 L- B5 Y2 M( o+ y6 h. s
*/
& Q# R& M0 ]7 ]" D K' t* A
9 W5 v8 G; k. q" W3 s3 Y, z
asm(" nop");
$ q6 J4 M: x% [
* g0 o6 I% a _' | Q
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
) r4 I; g: H3 \, T) V
}
) d- P" s- P' G" S8 t Y* W$ ^) g$ d: c
7 `1 c9 r- B0 c( n9 G7 s D$ n
/*检查UPP传输的数据是否正确 (loopback modes only)*/
) E. M) C8 s- H; ~3 m6 J( }2 M
//UARTprintf( "i=%d\n",i);
: m$ t% Z3 n1 P! F' X
//UARTprintf( "j=%d\n",j);
6 C( T+ `5 }0 W
UARTPuts("Data mismatch in buffers.\n",-2);
1 Q+ S* F3 U5 s- s& I# G, a# I9 h
if (upp_interrupt_count == 2 && upp_error_count == 0)
! `+ f0 b# w+ N. B
{
4 S- a) |) _0 I: ^# Y5 U% \& j7 Y
for (i = 0; i<upp_frame_size; i++)
( M+ o$ e8 I4 e: s3 t1 C! A
{
& e3 A* Q) b# ~+ p. t0 F5 {
if (upp_buffer_a
!= upp_buffer_b
)
r5 ~& O5 i. d; ~9 O5 E
{
/ B6 X2 @7 o0 j
upp_error_count++;
& }/ _+ K6 K9 H/ \* l9 Z# l1 ~- h" I6 \
}
3 @) E8 p7 Y+ J# r9 l w
}
0 ~* S' c- Z! q' o$ N1 T; _3 D
}
# G* f6 F1 `% N" d+ v- I
7 ]6 b# J5 J5 p9 D+ J; Z9 I' ?3 e
/* 报告通信结果*/
( U" l+ a" ^$ k7 e; U/ F5 C
if(upp_error_count != 0)
1 a: D4 ?( c% i
UARTprintf( "upp_error_count=%d\n",upp_error_count);
/ l" N3 U% Y0 |" C. [+ q2 X; S# t" m
else
" s5 f( [/ a) N
UARTPuts("uPP transfers complete!\n",-2);
' \$ W" z3 }, Y8 I4 x
! T! q' o: d! j) J" c
UARTPuts("Do you want to print all the data?(y/n) ",-2);
2 ^* L3 W7 h5 j) ]; [
UARTGets(ch,2);
% M4 z p2 \# ?# z( g9 m# _: ]+ q
UARTPuts("\n", -2);
& p v, r: H: B- {- |% j: s/ \
* ?" B/ J4 i; y, N: g
if(ch[0] == 'y')
5 j' ^7 b; L, x) K" L
{
" ?, k/ U6 D* ^5 j, h9 ?) c- k
/*打印全部读到的数据*/
5 r8 ~ u& j( j# E
for(i=0; i<upp_frame_size; )
! L. A( k" k; _ a& {3 B B
{
/ z( O/ f# I+ Z ]& W! _9 G$ z: F
for(j=0; j<5; j++)
' O5 P* @* o! ~% }1 a+ Z7 G
{
) |& Q* x3 _) Z; h, |- I% M3 R
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
$ o1 p4 d+ J: D6 a% \* w1 [
i++;
1 n7 Y( k& _+ s1 v* e
//if(i >= 4096)
+ ]* J, Q4 d3 Q# d4 [0 c
// break;
i- O p" E* s6 h8 R
0 Q% v3 l9 i' o2 o/ a3 g% P- H6 t$ }
}
) P g3 Z$ a N! T2 v& K
UARTPuts("\n",-2);
, Q, x& ?2 Z/ ?. r5 f" E; v. f
}
0 ]8 [ `( {- y9 \" |4 `& j
}
5 Z5 |" o) g* B" _6 x
5 I3 K7 `3 G+ ~" ~
}
+ v6 p' J8 ^+ d0 O! k
8 J0 j# ?3 |' J, v8 B! \) K, _
|: Q* J* l4 l( R# B E5 I
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
7 ~* }& Q. |* d8 r4 e
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
0 f; j4 P( @$ t f$ ~3 _
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4