嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ p' A# w c e6 r# t2 q
Void UPP_TASK(Void)
) \5 R/ ^+ [' u4 S
{
1 Y7 s2 p( {. z8 J& e( `" t: F/ t3 @
0 @$ I; B1 o! x# F" ?3 Y1 H
int i,j,k,target_int_count=2;
4 e% N8 A! I3 I
char ch[2];
( `; j( I# }; i
: Y3 c: z8 g7 `
! r- M; S9 h2 {
6 n; {: k* A1 |( Z* D8 b
upp_interrupt_count = 0;
+ V2 k, r% H% ?3 f+ D$ q
upp_error_count = 0;
w( m5 K2 [# o9 _- K
3 i! Z7 G0 U E9 Z
UARTPuts("\tResetting uPP buffers...\r\n",-2);
/ w$ y% T$ i, a% A
// Initialize data buffers
) h9 u. ?2 a. I4 W7 _& n0 M0 O# o
for (i = 0; i < upp_frame_size; i++)
0 V* s/ }7 K3 {4 X/ K5 s& Q
{
, s Q& p$ _9 f6 k/ x1 J( i6 t
upp_buffer_b
=i;
6 O- L4 u! u) Z8 X; k4 _
upp_buffer_a
= 0xDEAD;
9 Q M& [8 f/ }; B, h
}
2 f3 z. k* c% O" j7 f, Y
3 s2 A" U# U% u6 d
//for(i=0;i<1024;i++)
: q9 @/ D* H' N. V0 d: G. z8 x7 }, z
// temp
=0;
) l8 }6 J9 k$ p
4 ~6 S8 K/ [7 D7 k6 T! o4 I6 {4 O
//UPPReset();
: d$ b4 a' j" s0 x
/*启动UPP DMA传输*/
! J& T; j& F$ {6 R8 D6 ]1 b% V
UARTPuts("upp_prog_dma_i\n",-2);
2 _7 @& [( K7 j* \
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
" Q' n1 X, f! `* C0 {$ j) _
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 T6 }: z ]$ j5 X
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
- G0 X# n, B; H" b/ @$ D) z
) L2 j* B5 q5 S, }" e k
UARTPuts("upp_prog_dma_i\n",-2);
6 \# ~9 f6 M' X* j
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
* }4 i( e0 u, N l! h( E, }
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* |' W# G* f: `5 K# |
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
( A7 l: o6 A- o) [& M, [- {1 }. P, J4 H
+ W2 K& K9 W5 |: a- r" q
/*等待UPP传输完毕*/
9 R$ F- q+ ]7 l6 l; r/ ~
//i=0;
8 @2 ^) Y8 {+ Q( [$ N+ O2 G! V3 Q3 i, r
//j=0;
6 d: y% V& @; i8 b/ X; j0 f4 d
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
U5 B, b: @* E0 Q2 j: @9 k
{
7 Q# C* o! K! x1 f6 _
/* 测试UPP传输的同时操作普通DDR数据
8 R1 h2 t' H6 a" h1 S" r5 h, b9 E
temp
=i;
: j( }6 Y7 G$ L( A4 U- N
i++;
5 l4 z# g4 a" {% V2 r
if(i==1024)
! y3 O8 Q7 R! [' [6 k# J0 i' p
{
: C. i$ _( X7 W0 I* H
i=0;
5 }% |+ f6 t9 i6 J% G
j++;
& G& ?0 w$ U1 t0 C; R
}
7 x% w" Q6 z: u. ~% w# r# F
*/
1 F; \/ M+ J( t) c
4 Q. _1 i) j r& D
asm(" nop");
6 C" d" W0 k0 q+ s
# V+ o6 `9 n3 @
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
4 t% ?0 }; W- Q; Z2 Q
}
' Z: c% m/ M9 D: ` ~7 v* N% j( @
2 g- z$ L7 k( \; P2 ^8 N
/*检查UPP传输的数据是否正确 (loopback modes only)*/
4 L# D6 t4 ?. b0 k- ?: @
//UARTprintf( "i=%d\n",i);
[: | q5 Q5 P8 A! f( u
//UARTprintf( "j=%d\n",j);
6 s2 s% K& J) ^7 r K- n$ Y Z
UARTPuts("Data mismatch in buffers.\n",-2);
5 {8 W' P9 t3 o- |+ P
if (upp_interrupt_count == 2 && upp_error_count == 0)
3 P) H) O" j( Q8 P5 u' O4 \
{
% v9 W R* {' @, n- O
for (i = 0; i<upp_frame_size; i++)
; E7 s* G1 W: W/ u6 M; d! K
{
- h5 w* n% h4 B+ K+ {, [/ `
if (upp_buffer_a
!= upp_buffer_b
)
0 z8 X. }! L, p7 j0 C( x/ D1 M
{
! S4 P' P- U5 H7 M' S" N2 R
upp_error_count++;
/ J. Y4 \2 C: g
}
$ ?: M7 L' \$ L. m( E5 S
}
, I: Q$ W6 _4 x
}
( w5 z! P1 G8 e9 E
, `. T. s) u4 Y9 i/ l9 F2 f& r
/* 报告通信结果*/
% k K8 ~2 F+ C) G8 y
if(upp_error_count != 0)
: J) T3 d3 X# n; J8 B9 O: Q2 U' ?
UARTprintf( "upp_error_count=%d\n",upp_error_count);
& r E5 k' I+ X
else
5 w' x, l1 D# c* D, N" E
UARTPuts("uPP transfers complete!\n",-2);
# s; y4 p& Y1 }0 @* |
( V4 V* q& K6 V4 l
UARTPuts("Do you want to print all the data?(y/n) ",-2);
- X z" p( ]9 c9 P) ~, \
UARTGets(ch,2);
; S. y" i0 H! ?% ^" c7 n1 T
UARTPuts("\n", -2);
2 @$ x" x, U' R! f# w0 ` d" ~
- H% A( s3 v$ F- j( B e
if(ch[0] == 'y')
3 x! m# G, \+ F
{
' _; P% ?& Q. X' w
/*打印全部读到的数据*/
3 C% L- e0 `+ H9 h& {7 S$ A
for(i=0; i<upp_frame_size; )
& |$ B) v' w/ r8 ^
{
! \9 J. X6 @% R* U7 q
for(j=0; j<5; j++)
# L" j8 ~* Y4 p# s) I/ c* a. g
{
% l) ]- x% F& m E, _1 H
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
* H$ g/ k) W6 ~- f3 |
i++;
# O* q1 T) S) s f$ q( ^
//if(i >= 4096)
1 u! o) Y( H1 y: A! ^8 ?4 P6 z1 L
// break;
5 }" d9 I S x6 e6 F# [
1 Q ?$ u4 r2 r/ N
}
* g# T# c$ h1 \- h D1 n0 F
UARTPuts("\n",-2);
3 F4 {, }& |. P, C
}
( j7 r% t0 Q9 V4 o ?; E& Z
}
' ]) C: C! L! F' h
& c' W, g- M3 B& N
}
/ R6 d$ s0 T9 h) n
* X9 S* f: N, Z* Q2 T. Y
. f+ l% p8 o9 M! h- H/ n; k
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" q( R5 F: {$ h/ [9 R
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
K T" E4 _" s3 G1 ] C1 x
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4