嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
d( a: b& F2 \
Void UPP_TASK(Void)
$ ~! l5 K* _/ H8 Z* G
{
% Z" f7 E% e% _( u2 ?
$ B2 y0 r$ a! O# }
int i,j,k,target_int_count=2;
6 V) i5 T Z. J- \- W M8 N9 w
char ch[2];
0 u" d& T7 [7 p$ p: }0 s, u1 B1 V
$ M0 q/ L) ]- L, q$ U
; z* O% @3 n( ?
5 F3 J$ W* B2 S( v2 I# R( M' T7 B6 @4 ]
upp_interrupt_count = 0;
0 S! @, a/ g- H2 _
upp_error_count = 0;
: L5 Z4 ~" C6 C0 l9 x, f
( [- J: @; E# m- k0 l
UARTPuts("\tResetting uPP buffers...\r\n",-2);
0 [( m6 g1 @; N6 X/ v
// Initialize data buffers
0 a& f* H( _9 e: } |) M& h& f
for (i = 0; i < upp_frame_size; i++)
4 i6 }" h9 y1 r& U
{
6 M9 l3 T1 t. {# p+ S
upp_buffer_b
=i;
. u- w( s. Z2 a6 X& Q, l2 o! z" ^% _
upp_buffer_a
= 0xDEAD;
0 S# Q5 ~+ g5 T( i/ O: J8 Z
}
& B3 ]* L# d) S
6 X& j$ K9 ~; e2 k1 h" G
//for(i=0;i<1024;i++)
+ H4 N- d$ ]5 G& i! g# j, A$ G0 D
// temp
=0;
E/ B0 Z/ t; r# o$ `$ b# Y
$ y- o/ ?, h& p
//UPPReset();
+ ~/ X( m# V1 b" W+ |! [
/*启动UPP DMA传输*/
$ h' R* C+ ^! g
UARTPuts("upp_prog_dma_i\n",-2);
) k: x3 z( |3 n
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
" w* O) |1 Z8 D- H. z- @3 A; X
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) F; ]% x0 C' B# p6 |9 }
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
+ E9 J% M& [% k/ F& d* f5 u: z% V) e
* S k7 w0 X$ ? F8 U. J" q& |
UARTPuts("upp_prog_dma_i\n",-2);
" w) ^8 x8 x9 t% y
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
u6 K4 k% [0 r8 n4 A: |! }/ N7 z. n
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- v! ]3 B6 V- i4 g+ s# Q) o" V2 g
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
, } j- O, z/ W
: a/ i: ]9 S; m" o1 U+ D. c: J
/*等待UPP传输完毕*/
' u$ b' g2 S/ ^, V: T2 K
//i=0;
( x1 p9 a1 Z5 E3 B, Q, }! `
//j=0;
. X5 G" k, j; R9 o$ U4 G8 K7 p& h5 A
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
' f$ L. m8 Y, e+ L' {7 q" u" h
{
& R& a+ Q( C+ K& X3 h& y7 C
/* 测试UPP传输的同时操作普通DDR数据
; p/ k' Y# u" Q5 Z) x- B8 x9 g2 q3 D
temp
=i;
# q V3 \$ |* c0 }
i++;
0 y) q& r3 e; ^) }6 N$ B7 b
if(i==1024)
" I9 X0 Q8 m0 d! |; t
{
5 l9 p& [6 g: @" Q
i=0;
F+ n0 ~! f+ c
j++;
. ]3 t! a! c& @+ n3 G) O5 Y
}
2 H( A0 t' K; N9 ?) ]
*/
/ Z2 Q& k U/ t+ p4 J9 |
- A; X; B+ R% N; W# z0 Z( h
asm(" nop");
% l$ P' P$ c: h
z" M( ]2 ?# d5 i# s
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
5 {) Y7 [/ \8 O" F4 D
}
6 ~4 l/ m2 }! x& V& v
$ Z# p. Q g0 N
/*检查UPP传输的数据是否正确 (loopback modes only)*/
, D; K: |6 [5 G9 i
//UARTprintf( "i=%d\n",i);
7 X# f+ {" R# e, K8 r! |5 ^
//UARTprintf( "j=%d\n",j);
1 v% E! Q$ D: K6 i5 S: K$ q
UARTPuts("Data mismatch in buffers.\n",-2);
; o, G, t8 v; ?/ Z, I+ U) }" B
if (upp_interrupt_count == 2 && upp_error_count == 0)
2 C( C& \3 q4 _+ g4 \
{
, O0 N! ~ o/ @1 ]8 B; a, [& l; P
for (i = 0; i<upp_frame_size; i++)
. U6 h: q" l3 I8 Q8 |: d# { L
{
4 x( t7 Q- C% u9 a8 `5 B
if (upp_buffer_a
!= upp_buffer_b
)
% J! [: e$ q; j) H
{
4 Z4 O! F( ?. m3 p+ S5 c
upp_error_count++;
' H, {4 e. B3 N9 o5 {
}
0 k$ j4 [( F) J7 s' y4 H1 u
}
1 Q6 ?; m3 a+ m6 n1 Y
}
" R; i# d" f; g7 l( n- u& B
# D6 Y* S1 ]0 a8 _
/* 报告通信结果*/
/ z( T2 i( A/ `0 h7 |
if(upp_error_count != 0)
6 ~# P" B6 c5 X9 a( C
UARTprintf( "upp_error_count=%d\n",upp_error_count);
* u1 h0 ]6 t8 t( g
else
( h v& I" P, N/ \* o- x$ ]# S
UARTPuts("uPP transfers complete!\n",-2);
, x5 O: h" }7 k: x- _- r0 T# _
- N, ^+ l1 \7 l
UARTPuts("Do you want to print all the data?(y/n) ",-2);
, P8 L6 G/ Q; A8 A* [* n$ E5 t
UARTGets(ch,2);
. p" o0 X" V3 M5 X# p
UARTPuts("\n", -2);
* e! }9 r' U' n
- K; K" ^! H1 s- L
if(ch[0] == 'y')
3 d" k/ u& |$ J$ E; ~ t; C5 p$ f
{
) j% ^6 E" Z. l) ]$ u4 D& ^) g3 i
/*打印全部读到的数据*/
' D! e! t$ M T6 y3 m+ J. e
for(i=0; i<upp_frame_size; )
. i* K% z$ x' e2 e4 @7 N
{
8 E7 u# t% L4 s+ o. P) i% ]( A
for(j=0; j<5; j++)
- ^3 [/ w; Q7 _, }2 B' }
{
) C e% b4 G: o
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
$ B% H& T7 L4 W# C7 k2 i) n
i++;
3 o' |6 i6 ~: a( y6 o5 y
//if(i >= 4096)
8 [+ k9 `6 |% r
// break;
7 \- j8 }2 k" S
3 p/ y+ d# q; T4 C9 a% w
}
- F A# d5 D% t5 y& G2 ?# j2 J
UARTPuts("\n",-2);
0 k. X6 L' _5 U4 ~5 L. @2 c
}
: ^: y. S% i) g) {+ E3 A+ ~) T/ i2 b
}
* U" T1 F4 ]$ F& ?: }
1 ?% f2 r$ x* z: ]& V) W
}
( T8 ^ X) ~& V8 j. T$ w
: W8 W3 D4 a6 f) c+ M; Q
' I6 U3 J( ?% G
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
9 ?* J/ Q$ K8 n7 w- B) v+ u
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
* g1 } S/ B% ?! m0 ?1 x5 c
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4