嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
* h& C9 h& [" R0 y z# K, P
Void UPP_TASK(Void)
: q) m- X8 ]: J* \: W B
{
' L! {% T }! J
1 j+ H0 T7 [) I- N# e9 Z4 v, P
int i,j,k,target_int_count=2;
6 E+ Z' D* I1 k% c9 |! N. R! Z
char ch[2];
4 f) w3 o; {: V$ B b+ y
$ B9 u7 N9 g7 U: W6 j! N9 R% D
( U! ]- I: ~: ~% Y
1 S) h) E, C& h9 S
upp_interrupt_count = 0;
' P3 V. O; I9 _
upp_error_count = 0;
! B `2 g& H0 K0 P& l9 O- J7 m
! `& `1 _# N/ D: Q
UARTPuts("\tResetting uPP buffers...\r\n",-2);
: j' ` X& K8 W
// Initialize data buffers
2 A N# Q. a) k5 ` w$ c/ k
for (i = 0; i < upp_frame_size; i++)
% G7 c9 m# a C
{
4 X- F# G/ M; Q7 }. ^+ m6 N
upp_buffer_b
=i;
+ P# P1 Q! l8 ~1 t b# [+ C
upp_buffer_a
= 0xDEAD;
, o* R3 m$ a7 H# k
}
1 \, \. B7 P) E5 \7 A1 a
- F4 c* T' d& l2 d
//for(i=0;i<1024;i++)
4 e' ]* N! O- t0 f( B
// temp
=0;
. l$ ]0 _ x; a% L( ~, X* K# i
$ }2 h9 D# s2 s$ Z1 P0 L
//UPPReset();
$ K/ a( s4 ~# l7 a
/*启动UPP DMA传输*/
, P, Z7 ` A0 U- R/ e
UARTPuts("upp_prog_dma_i\n",-2);
+ k, r1 y( s& x# Q8 O* L/ H
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
7 g# `: @* j3 M) y; W7 |4 v3 c
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 d9 O' ]1 c8 e# R
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
1 X* ~8 F1 |9 N w$ g& f
$ A) `+ M- Z( E0 H- M
UARTPuts("upp_prog_dma_i\n",-2);
6 A0 ?" s7 u. E* ~" } m( p0 I) ?' q
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
) f* x* M2 ?2 @3 c
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 ?" \. X$ H$ F
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
, b% t4 {" M! ?( Q# ^
4 y; _$ e) l' W) Z# c
/*等待UPP传输完毕*/
: t' [& I4 b- v. H6 a" o
//i=0;
$ W* {9 I G5 T$ |# s
//j=0;
& O& p) g$ C: h0 f0 [
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
P! ^) k/ }! y0 R8 X' V u1 o
{
( J4 V) h. N' @
/* 测试UPP传输的同时操作普通DDR数据
' T h5 o7 G# L8 v+ i" Q2 T0 [$ C
temp
=i;
6 \7 D% E7 N& q) w4 W; x _% Z
i++;
: W/ z6 ?! a/ E3 g) _6 J+ j1 G8 j y
if(i==1024)
: Q- e) v' u' u* z6 p
{
1 g& j' q- k: d4 t% `9 L2 X9 `
i=0;
+ H& I/ O* Z6 d: e
j++;
, m4 O* f1 C1 W2 f' P% E
}
: M# M& m7 I7 `3 d' b
*/
t. O) f9 o% w+ ?
0 P$ d; Q7 g; d; ]
asm(" nop");
+ I& v2 M: }. I& M1 F2 p- _
# K& E2 A M3 b9 X! a
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
+ N3 t3 k9 G& o n, e
}
! A( t P% ^6 P' B- V
, h8 Z- F* B2 [" e
/*检查UPP传输的数据是否正确 (loopback modes only)*/
+ J! R: M0 H* ]2 j% o( D: }
//UARTprintf( "i=%d\n",i);
8 c& O4 u" h( I+ _
//UARTprintf( "j=%d\n",j);
; [4 g9 O9 g1 E" |4 Z. i, B
UARTPuts("Data mismatch in buffers.\n",-2);
U; m5 K9 N. G O; F
if (upp_interrupt_count == 2 && upp_error_count == 0)
9 L8 Q; p/ |% |+ k |5 V3 z+ l
{
! ^7 Z8 g3 p; w# L3 x! n% J
for (i = 0; i<upp_frame_size; i++)
, ^/ ~% [$ a' O* j4 y2 u2 s
{
8 G6 B! y0 C$ W- d$ d7 \! C: v
if (upp_buffer_a
!= upp_buffer_b
)
, o5 j/ Q5 d3 o( U
{
1 |/ X3 v: S- a3 d, f7 F4 j
upp_error_count++;
1 c7 H' p+ I9 r$ l* S
}
9 u0 v1 b' K- ~( v
}
1 x3 M, k0 q! R1 q0 n
}
. q% b2 }, O1 p9 `6 \, u
a. x2 c) I. M/ \/ j
/* 报告通信结果*/
! ?! i0 E s" D2 S, _: g% J
if(upp_error_count != 0)
A% a( u1 L6 W: w$ U
UARTprintf( "upp_error_count=%d\n",upp_error_count);
$ L) D5 M' y& ~9 c* Z' n
else
) ?9 g, i/ S& @3 r6 i
UARTPuts("uPP transfers complete!\n",-2);
: U8 d% R: I- u; n4 z# d, {
' B( w' K+ t" Y l; [- p- Z/ J
UARTPuts("Do you want to print all the data?(y/n) ",-2);
* \3 S, R: T2 V, S% }
UARTGets(ch,2);
- @9 v6 s& X; J: ?$ ~
UARTPuts("\n", -2);
( y5 ?7 H8 B6 x( ]% H8 V7 S
! a$ W" y3 y, t$ z3 d; X
if(ch[0] == 'y')
( L5 X! Q6 l; e( e0 v* \
{
4 [ S( }9 G3 ]
/*打印全部读到的数据*/
: ]' E% }7 L0 z& J
for(i=0; i<upp_frame_size; )
1 U$ h1 ?- `% {4 o
{
5 t7 }) J% b3 E* X7 | \1 T
for(j=0; j<5; j++)
/ Z) }0 R7 H2 _9 \
{
" x# D# q1 Y5 ~/ _7 |9 }
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
8 I' x6 l* M9 I% a }
i++;
: }- a) g) l# }6 Z- p1 a
//if(i >= 4096)
6 Q' }& `9 U! S# R
// break;
$ ?* E4 |. h1 u2 W" X9 O
3 I- q0 i' q( W4 J; {
}
: O6 h' l; `' Z
UARTPuts("\n",-2);
- G/ e0 I' h$ c+ r/ G# P# _5 Y
}
) W# ?' d: y# k7 F1 B, E& a. U
}
; o- Y* h0 T6 ?; i
. l4 ^6 D3 \8 v" f k
}
! U8 G- K' N. `0 C
6 `. R7 k1 i" V' p
% e3 Y* T( S+ }
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
- w- n/ _, G% |6 G' t. \9 o
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
) y7 {! G- ^! Z- Z# A, n# A
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4