嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
( b# f f/ O7 |4 M6 j! C h
Void UPP_TASK(Void)
2 d; d- f( E6 K
{
. N# I. p2 b3 x: I" K. i
0 t* j$ D B: I" [# |
int i,j,k,target_int_count=2;
' h' v5 \! k& H2 j6 @* H
char ch[2];
: L) n4 R3 W- n5 a
9 C A% X& |% H z
6 L( H) L, Q2 ?6 {- s s; j
9 e% e. ^& n/ S
upp_interrupt_count = 0;
* R: l% r: p1 T( _* Y' n! T
upp_error_count = 0;
9 z! n7 X6 h/ b7 y
4 } C' [1 C0 ? _2 `
UARTPuts("\tResetting uPP buffers...\r\n",-2);
# m4 t1 F* u+ \( G2 ~
// Initialize data buffers
% V0 e6 a* ?7 `9 K
for (i = 0; i < upp_frame_size; i++)
& w; Y7 o$ |# ~6 [9 G, {
{
6 a3 J( f" e& k* {
upp_buffer_b
=i;
' w% h6 G9 b9 X% \6 @' f
upp_buffer_a
= 0xDEAD;
. F. w9 i* d% H- \
}
H# p+ ~" y% c7 o+ B6 H
) D$ i2 ~' B( B+ Q/ n
//for(i=0;i<1024;i++)
2 q5 h# _- }/ i& w; T- g' s2 d
// temp
=0;
) Q3 R6 r! @/ T) f2 {1 c
, {7 g/ j& N6 c0 ?# }3 h
//UPPReset();
4 j, p# t0 k- J. f( [% P7 D
/*启动UPP DMA传输*/
' v- F g7 @% R8 K/ p, A# K
UARTPuts("upp_prog_dma_i\n",-2);
+ f; ?3 r: w) i4 n e" G
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
8 l6 p6 k& k J( [. _8 X
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 j! V2 K. x, Y3 g; \' y. `# D" }
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
' I. m' p7 `9 O2 G4 J Q& C; z
0 k& n. X- g" a6 x3 C8 R
UARTPuts("upp_prog_dma_i\n",-2);
6 _: n+ t7 s& C9 i
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
. \: x. t9 X1 C( k
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 {! E# m7 u8 `9 ?+ C
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
' {0 A/ p' g, A! C
4 Q% |' C9 X( q4 s: D( f
/*等待UPP传输完毕*/
: b0 [+ n. A' Q7 R: ?5 K
//i=0;
2 G$ q% U, J) \: }
//j=0;
/ I% b. a {3 r
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
5 y A' C0 l) O, s
{
^3 Q7 f r4 {( j+ y0 D! C1 y8 b
/* 测试UPP传输的同时操作普通DDR数据
. P# `8 w, ?; c& v4 q" c
temp
=i;
& \! t, o+ Z; }9 C& a
i++;
+ j; p8 h! A B
if(i==1024)
o1 i; K3 {) j- L6 ^- q
{
$ E& l% a- L! J
i=0;
8 [ r& ~) ?3 E! i& K. F
j++;
- M% @' y' R$ q
}
: g8 V. {6 n, X3 J/ h
*/
4 G( T2 ~& W$ j5 o. J
$ n) C- b$ W L: ]
asm(" nop");
" S+ m2 Y$ e. D, ~8 i e! U9 V
* t, O0 O/ ?' _ H5 E
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
. x2 D B/ b$ D! j& Q
}
. J3 P; W- W4 o) L6 M3 Q& ^
* `* R9 l' h. W8 ?( r3 ?: @" d* p: c
/*检查UPP传输的数据是否正确 (loopback modes only)*/
# S$ ? _ c/ P" F
//UARTprintf( "i=%d\n",i);
0 j t. x5 S( k& Z
//UARTprintf( "j=%d\n",j);
7 I) H. g7 z3 x
UARTPuts("Data mismatch in buffers.\n",-2);
8 m# ~7 c- n2 l* ?2 v) w
if (upp_interrupt_count == 2 && upp_error_count == 0)
: h. C, T3 @" g+ l
{
+ _% d3 J! W0 ^, U; G$ o: V/ A9 {5 |
for (i = 0; i<upp_frame_size; i++)
. E1 [" W+ a" R$ u& V6 B/ r
{
: {. q1 ?, B6 F0 w# o" J
if (upp_buffer_a
!= upp_buffer_b
)
: v) p" A2 q5 B* y; |
{
$ R5 F$ \: x! c+ _! Q7 d$ R2 e
upp_error_count++;
; t) S2 \! V+ k
}
6 f6 _9 {, F' {8 `
}
/ D4 B/ V) }" ]4 t" f' n4 [: m
}
) Y! m$ d+ z) T. ~5 ?
4 _( U+ ]& q- A5 V. U& f
/* 报告通信结果*/
2 k; \9 B$ P( u5 l/ O
if(upp_error_count != 0)
- k8 p# d" \$ e( w
UARTprintf( "upp_error_count=%d\n",upp_error_count);
7 B( Y( [3 F4 u5 ~5 Z: K
else
% o- C& ]. r4 j* H& M! K. _! n5 p( U% X
UARTPuts("uPP transfers complete!\n",-2);
4 L- j7 W" Z3 d. D
# y( s; y4 _, E/ M) ?
UARTPuts("Do you want to print all the data?(y/n) ",-2);
" N9 b# Y% z, Q4 p9 s3 p" E
UARTGets(ch,2);
' n/ z. n- |6 e' m4 {$ Q
UARTPuts("\n", -2);
. w% { B4 z0 ]( u& @
8 F( {& y2 I) ^! P/ N; `
if(ch[0] == 'y')
( N$ a, }. F) }" U: K5 d) h
{
9 x! x+ T4 v; {0 o- ^! T8 p6 {
/*打印全部读到的数据*/
" u( r) t( O1 L c' ~0 K
for(i=0; i<upp_frame_size; )
/ d/ H3 _ N* M( G5 Q
{
: K( A+ P. B. e. o' ~
for(j=0; j<5; j++)
! K1 Q, m. s& u7 E9 z6 Z
{
0 | h# G1 {( d
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
1 ?4 y/ ^4 `: |! ]3 ^
i++;
2 Z* d* U X/ P+ {$ X% u
//if(i >= 4096)
7 p! f1 D& k C3 ~. Z% k0 `
// break;
+ L+ Z @8 ?: z0 g, ?; `$ [
% L" \: }' v, K* c- [6 A( h- x7 ?
}
* n7 n$ t- R7 k2 J5 B9 I) F
UARTPuts("\n",-2);
+ Z& }8 P) u0 i0 ~# v5 \
}
& s5 |' t3 C R: r
}
/ \6 Y$ q0 c: k& f
; r# r% O1 @ K- y* m
}
4 ]% Z! b1 U5 `) j
; f9 u* o4 h0 @% k$ G& X v1 z2 K" J
, L5 y- ~) D. q. t! {9 e
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
0 X S% [# `& T, ?: E j( h) K
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
) s' D9 o1 R6 H1 ~# ~/ M
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4