嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
7 E% Y* w+ H! v3 X* S; S
Void UPP_TASK(Void)
e; T8 T" Z: D: u/ }- S) z
{
5 |+ Y4 {1 E* Q2 n' C
" |) v6 Z% L5 \7 X8 p
int i,j,k,target_int_count=2;
& U8 [* v* G6 z
char ch[2];
3 x- F4 A$ O; \- `1 y7 }* h: Q% q
; u5 k; v. j# g7 u N
/ u; r' e3 f2 C
9 ^6 M: `! @) Z* G7 P( c
upp_interrupt_count = 0;
( C( G8 ]+ A5 X1 T8 N
upp_error_count = 0;
' L% \# r, p8 }) K `' Y5 [2 D: Y
& V1 N4 P c2 {8 I: v- X
UARTPuts("\tResetting uPP buffers...\r\n",-2);
% H: {7 E; Y: e
// Initialize data buffers
, i; H. w) J( P( Q4 e. E" O
for (i = 0; i < upp_frame_size; i++)
3 B7 G5 o+ I) m4 f K& K- k+ E3 x
{
1 j# U6 ~3 c$ _8 v& R
upp_buffer_b
=i;
4 J' P# ?4 M' j/ O
upp_buffer_a
= 0xDEAD;
/ _# D, d3 o% L9 I1 o* d* M
}
# {. S b4 J% l, S
" l5 q7 }1 @- I6 w
//for(i=0;i<1024;i++)
0 w+ k5 t8 N2 q- D* p7 r6 v8 o5 X
// temp
=0;
! ?* w! C1 B t$ G. ?, b
4 }! V3 L1 T: X4 R
//UPPReset();
% |& ^: v4 K6 }, u
/*启动UPP DMA传输*/
j0 x" b) P+ `9 w' j
UARTPuts("upp_prog_dma_i\n",-2);
$ O2 @2 I+ U& ]! s
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
& r) G" S" B- z& o
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ q5 E6 D6 s/ Y6 E* f' X/ U% c7 g
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
5 K1 k2 f* l- R7 n8 p; H% ]+ t
- {" `+ e# V7 G% m
UARTPuts("upp_prog_dma_i\n",-2);
( z: G' y/ j0 j# B+ y$ G
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
2 m+ e& j$ G7 q5 n
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( a! u9 S ~. V5 q
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
3 a. }3 ~ `* |$ U
& D: Y) I9 y, L, f- g; A
/*等待UPP传输完毕*/
* d o6 J/ k+ E$ _ J4 Y% u
//i=0;
7 T+ ?# `/ ^) Q+ l7 |* h* ~
//j=0;
: E/ T2 H% C" n) Z9 W( R5 ~
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
$ S Y: T( C# I% G: ?% F- }0 m
{
3 K) z! l: l0 V
/* 测试UPP传输的同时操作普通DDR数据
! H* Y6 G, I4 R0 D. V7 q) d
temp
=i;
: a2 R* ?3 h- \' [1 @' _% S
i++;
& Q! O. U0 L3 k3 f7 k
if(i==1024)
; v3 o2 ?( B C
{
: }; ^: ?5 v' ]' s( @. [
i=0;
9 L' P* S+ P4 I
j++;
6 X( C5 w) y6 D, f. a3 _
}
3 [) n f6 b9 {& C( E4 Z
*/
+ o7 E" z$ ~6 Z% A3 Q( Q* C! _
! T; j; f# }& T: U3 i
asm(" nop");
( X, j+ s( j; i
, ` ^# w0 `% F( M F3 F
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
1 \* V3 b7 @0 [* u" o* m
}
6 b, g. M% x' L0 _
7 p7 d- L0 c8 q, a- J; g! M
/*检查UPP传输的数据是否正确 (loopback modes only)*/
- M0 M8 ]: l; o7 S# a8 p
//UARTprintf( "i=%d\n",i);
6 T' O3 ^* i* h) j0 ~% `+ j
//UARTprintf( "j=%d\n",j);
_$ _2 t3 S; Y% d4 }$ v( s( b
UARTPuts("Data mismatch in buffers.\n",-2);
5 z, W2 S# o2 \
if (upp_interrupt_count == 2 && upp_error_count == 0)
2 |- V1 Z* f2 k* h; D" V* H3 r& ]
{
7 j7 M, W4 o/ Y
for (i = 0; i<upp_frame_size; i++)
: B' [3 Z4 G9 A6 A3 i
{
" O6 Q4 v2 G: _0 f% K$ E
if (upp_buffer_a
!= upp_buffer_b
)
! j8 B6 O! b2 ]5 L) @; V
{
& q, Z/ l. j9 Z. ]# D" |
upp_error_count++;
' d& F5 K4 N0 ~ [9 w2 H: y
}
8 O5 i( E$ }4 F! T
}
3 ~" u( i3 `8 |& @3 Z4 X# ]
}
: P, J& b3 k K: x
9 `& _& ` s- y
/* 报告通信结果*/
/ t4 [; D8 h6 u& s1 P* t
if(upp_error_count != 0)
1 Q- P7 u0 |2 D7 s
UARTprintf( "upp_error_count=%d\n",upp_error_count);
/ g- R1 Z4 e9 J
else
) r F4 P4 v8 x5 {7 r* a: ~; N
UARTPuts("uPP transfers complete!\n",-2);
& S- g- C" d$ k
* {* E4 d3 e$ m: B6 z# K4 k
UARTPuts("Do you want to print all the data?(y/n) ",-2);
9 b/ q7 u: n) k& x9 E$ c( s3 y
UARTGets(ch,2);
# F) s8 X6 e9 y, J, z9 T
UARTPuts("\n", -2);
/ u7 {7 B5 V& h9 `- l# x, g: B
7 K% G9 E- t n& O
if(ch[0] == 'y')
" ?) ~" y" ], L
{
& T" I1 N% p" O: a9 `+ j: Y- G
/*打印全部读到的数据*/
0 J$ F: ?7 n3 I* q0 k
for(i=0; i<upp_frame_size; )
' y% e# P8 F+ x9 m
{
1 q8 L* @ o4 V5 m( R
for(j=0; j<5; j++)
+ r3 g( P O$ a% E9 e- J% I
{
o3 `$ |% n- q. {* s) G
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
4 Y4 |$ W6 S' n ^: U2 j& O
i++;
# @9 Z% e. L+ h7 M! c" Q
//if(i >= 4096)
1 G9 D/ V6 L8 s7 ^' ^8 r6 H
// break;
& W5 p9 W( a. a: A9 M) \
& l3 s0 q" r5 J6 u
}
/ E |5 y- F8 v* B
UARTPuts("\n",-2);
* P& U4 W5 p; y' _
}
+ y# B- w! Z7 h2 z5 i
}
" w+ f! c# I: [( u# B. Z- P
. v/ a9 H4 Z; I4 ]9 ]4 p. Y0 I# u
}
( z! X, i3 k; Q* u5 L
2 I, S/ g, x" P# R4 z
0 {! W! W2 \ Q! X2 l) u2 Y
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
s( B8 ]$ p$ _# A' e
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
& ~4 T8 I, B8 i6 Y2 J
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4