嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
1 o2 M- e% V% B: c
Void UPP_TASK(Void)
" |- [" Q- C* c* W# O/ D7 v
{
1 U% s2 e6 Z3 H4 T) N9 l( [) Q/ c8 Q
, \- j& s4 U+ n: R3 l
int i,j,k,target_int_count=2;
5 ^) z" ?8 V8 H, i7 }/ b
char ch[2];
9 P$ D1 V2 h: ~/ H
6 |0 z& @7 g7 Q( v3 W( h: a0 z
/ h$ b9 Q- A3 x# R1 U% K" C3 W
2 k8 m+ ~$ z. V& J0 L
upp_interrupt_count = 0;
0 ^2 E4 f1 P2 a
upp_error_count = 0;
7 p: i, v' T6 S" S9 i6 |" _
* g! F! {7 Q4 a3 _3 S; p% t
UARTPuts("\tResetting uPP buffers...\r\n",-2);
0 e% | q7 s5 i9 N' V0 b$ S
// Initialize data buffers
5 t/ S0 E* k' T( M; E$ w; @9 c) A& e \9 X
for (i = 0; i < upp_frame_size; i++)
# s" Q# l# N- D
{
0 _' }0 J2 {+ Q3 ]" }
upp_buffer_b
=i;
4 @3 Z5 |" t9 F
upp_buffer_a
= 0xDEAD;
- Z d+ g% V M/ u7 ~8 g( ~
}
- g7 n+ z6 |: u/ p2 s# n
7 B5 M9 K5 ^- r
//for(i=0;i<1024;i++)
( F& n: ]' X: |5 F3 B
// temp
=0;
. C( t- @6 q' I( K, m: D* j
; `, ~8 J# D) G, I3 {
//UPPReset();
; m( G: q/ z4 Z0 Q
/*启动UPP DMA传输*/
0 w, s. L& r$ y6 `9 U; |: V- `
UARTPuts("upp_prog_dma_i\n",-2);
1 Y) O9 v2 F6 z- [4 M/ C
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
$ X9 w6 J/ O, e6 D# p
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 V K: s) s3 ~' I7 B( n% a
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
/ q8 w' p0 Z, |; ^- h
) X9 g/ m7 N s q( R( _
UARTPuts("upp_prog_dma_i\n",-2);
; W2 y. P- D+ n5 c* O) w
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
$ u/ O, r+ v8 o! r% E
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 A3 E& V) O' B, S. X
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
# b% T$ \' {$ n! t- j1 `3 b8 c
3 {: E5 ]& T* H( R7 y
/*等待UPP传输完毕*/
( a3 {' o. d: _* r. W- S) V
//i=0;
: S* f0 c4 ^# b6 r
//j=0;
* [+ ]% J0 g; a! C
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
8 M7 `9 k* B% ]4 p4 H2 Y
{
+ x* _" w8 S, A' {
/* 测试UPP传输的同时操作普通DDR数据
5 @7 D% K! r ^3 ~: A% x
temp
=i;
) `- @: a$ g" V5 T: y
i++;
( {- D ?8 G' p$ y- H
if(i==1024)
7 P2 ]/ Q7 W- Y$ i
{
* d$ k0 t1 }, D3 }0 q+ h
i=0;
9 R( p+ K5 f6 a( O9 Q% y
j++;
* n$ l; G1 y% j3 p& ~- v' m3 N
}
# _; g& j$ a) U9 d% x0 x0 y/ M' h9 j
*/
- }3 ]$ h8 Z1 k; k
: \/ ?: A; {# w) k B j% z* `; B
asm(" nop");
1 g# B7 N. M1 [- ?" t
) p7 Z% ~. A$ C/ W4 \7 T; G0 Z
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
+ f* P! V9 b+ }& r
}
8 k4 u! J" A$ T" R
( y; {) K X+ A0 P" m$ I# l
/*检查UPP传输的数据是否正确 (loopback modes only)*/
# B2 l6 D9 W7 j
//UARTprintf( "i=%d\n",i);
) J" f+ s) u" V, ^$ m
//UARTprintf( "j=%d\n",j);
1 k( g9 w: l9 I6 ^" x+ Q9 H7 s$ t* B
UARTPuts("Data mismatch in buffers.\n",-2);
- X, c, G! B1 s
if (upp_interrupt_count == 2 && upp_error_count == 0)
; G" z$ t+ _" C# ~
{
! g3 m5 a6 z, V `
for (i = 0; i<upp_frame_size; i++)
$ X- o" a5 i) {; j& R, O( A
{
1 ^: y3 J% }: ]9 O7 T
if (upp_buffer_a
!= upp_buffer_b
)
# |! q% ]" C4 a8 Z
{
6 s; J( g1 S! r3 c! M1 p5 w: b! N
upp_error_count++;
/ l1 {) N- D! |- e3 f
}
( \2 y0 v) K9 y1 Y3 g- b+ }
}
! T, k3 @& J* q
}
) _, |/ @; [" M" H4 ^5 ?! A
8 t) r, N7 N- S% {
/* 报告通信结果*/
% C3 P! G$ h" D* B3 d5 s+ f
if(upp_error_count != 0)
" Y( @1 y( ^8 k* t1 H. T2 L6 z
UARTprintf( "upp_error_count=%d\n",upp_error_count);
" ?' \; \- b P6 w1 W5 \. K+ I
else
9 { k0 \- g6 p
UARTPuts("uPP transfers complete!\n",-2);
- l0 y7 z. y) ^$ u9 ~) I* |
' A# L0 m3 z- L8 \/ A% y
UARTPuts("Do you want to print all the data?(y/n) ",-2);
4 }) l# y1 I! W: \
UARTGets(ch,2);
3 e4 D# y4 [0 s% c
UARTPuts("\n", -2);
% s% c, g. p: S7 ^
$ G8 a2 ?( P' v8 g0 l0 f, K! R
if(ch[0] == 'y')
: u4 M J$ o* Y
{
: P1 m( Q" e! `; P% O
/*打印全部读到的数据*/
! @: q# N7 T ]( o/ w' {& M
for(i=0; i<upp_frame_size; )
: Y' {' v7 T$ R
{
C4 H) y$ D6 f: g% P+ X' f
for(j=0; j<5; j++)
6 {) F0 L0 S. J+ V, h# n
{
9 R5 ~% }3 j% ~4 M" {' S+ A
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
3 f! f7 i* C" f, {8 \
i++;
6 c7 V2 J/ A: r Q
//if(i >= 4096)
; ~7 K9 U9 Z/ h( E
// break;
, e; a$ Z' } O' J( _
* R& N1 `* i& {* G" ?
}
A L2 | X' I! Z; v, K+ g7 Y1 a1 Z
UARTPuts("\n",-2);
/ T( O0 v& ^' z6 Z2 b
}
8 w) N- r9 O1 }# j% t* W- O
}
5 \1 }) A4 J) e) Z( |0 |& g- Q3 n
( q3 o e4 D6 c3 R2 o* M3 p0 k
}
. Z* K3 o0 J9 |5 M: d' @; ?
! J$ _" D6 k V
3 t& \$ M4 I$ U- ]
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
- R ~& m: j! a
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
& R4 p+ Q. S# ~2 u
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4