嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
2 I& ?' v) f% ]3 b+ `- @* U" O
Void UPP_TASK(Void)
R: e, d9 K& u
{
8 ?$ G5 H U7 J/ T
, O# s$ a' f6 w3 m8 K
int i,j,k,target_int_count=2;
$ Q l' M7 l7 X9 h% C
char ch[2];
: ]: R4 D* h2 ?
1 T. ~: F0 y. q" ~
) e- {8 _' a9 f% A$ F- e2 Z
* y* w6 }6 G% `" t+ |
upp_interrupt_count = 0;
# t/ L5 U, X; B! g; L1 s' m% s2 e
upp_error_count = 0;
5 K, P7 @( j/ O& r. G$ P
4 N! Y; p$ j9 [ G; M
UARTPuts("\tResetting uPP buffers...\r\n",-2);
: R8 L* P2 x( k" T4 Q
// Initialize data buffers
6 x) I. g( i4 t& z$ m
for (i = 0; i < upp_frame_size; i++)
2 \; S/ h; p8 T: y0 B7 h) h
{
0 x* t: `3 y4 |0 n5 ]1 Q
upp_buffer_b
=i;
1 D' |5 N7 p) P8 s6 [
upp_buffer_a
= 0xDEAD;
" s$ i7 i1 r6 Q! A
}
1 V* d X; K! h o9 Q% o) [7 Y( [3 R
3 l9 P/ D; }/ p" d
//for(i=0;i<1024;i++)
( u9 m4 r4 ]& s7 L' N
// temp
=0;
; a4 l! D$ U; J8 I8 W$ Z
1 S: r6 ]- G* w) U1 ~! H6 `9 q; K' o
//UPPReset();
5 x! o& k* I1 b; @
/*启动UPP DMA传输*/
0 J/ N6 u; a& [* T6 @6 ^& l6 J
UARTPuts("upp_prog_dma_i\n",-2);
* H( \, C: O7 @% X8 _+ h0 ?
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
7 [* w/ w# M2 Y( ]! Z
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% w$ \' L6 [& |( ~& ~
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
1 j4 p0 _/ M9 k+ z s6 o
0 w$ e9 r+ w2 h' e. r3 m- {
UARTPuts("upp_prog_dma_i\n",-2);
: B% G0 f9 F8 b4 M2 [, f
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
8 W; p7 C. C5 ^5 [" c6 Q
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ p6 K6 O' e4 U* D" h0 x
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
7 y' g+ U& o3 z9 x- V% p
0 s+ e5 A) G0 n X8 j. w& u0 s$ Y
/*等待UPP传输完毕*/
/ n, E0 \% @, H$ @
//i=0;
7 y" f6 h6 e x8 \. b9 y
//j=0;
7 V% c$ P I! x; Z5 d8 k
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
- X+ Y6 L# n- N; a) B8 h5 ~; q$ d( ~5 J
{
' O/ C. t( p% U8 t& F
/* 测试UPP传输的同时操作普通DDR数据
- |8 F! M8 g5 {* {
temp
=i;
% g' k" o3 t8 r5 {7 y
i++;
" ]6 Z: Y0 j- H! o. u, t! g5 G# {
if(i==1024)
5 R. S! V% |1 a2 u. i p
{
, A4 m Z! y2 Y0 ]
i=0;
: F# {' ?- h. q O2 Q1 g
j++;
8 P3 ], Z$ U# R6 S
}
/ w- D6 n! `( V( U* y
*/
% R5 ?& i# ~ e, B
1 s; o# V4 O4 |3 ]$ g1 E
asm(" nop");
e+ k$ W/ u! Y4 K
* O' K7 _9 ]$ I" W! W. X v
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
' E5 u$ r. ?6 z7 A X: R
}
9 W5 E8 b4 O5 z# n1 \$ e+ O
, j. B( S8 f( |
/*检查UPP传输的数据是否正确 (loopback modes only)*/
, Y0 p! t1 Q. ~" {9 s
//UARTprintf( "i=%d\n",i);
- m- p U& _& Z* \8 k8 b
//UARTprintf( "j=%d\n",j);
( |- U, E1 k$ P5 B3 G2 B5 C( B
UARTPuts("Data mismatch in buffers.\n",-2);
* [: D2 f$ ]( Z
if (upp_interrupt_count == 2 && upp_error_count == 0)
9 L: [: \3 \2 |! f S `" C
{
( ~! K V/ e* [3 n# T# s
for (i = 0; i<upp_frame_size; i++)
0 ~, o( v* M0 ?' K
{
+ {( N+ q E9 F& y& I9 T
if (upp_buffer_a
!= upp_buffer_b
)
/ H+ s [0 z0 f) ?" Q
{
: `8 Y- ` m# t
upp_error_count++;
5 p+ ` i/ v8 C5 l( P: w
}
% Z; N F/ |! a1 i( N3 {
}
1 g6 `; S2 A6 M8 |; U% ?+ _
}
$ _! A( }& l8 S/ X
) S+ W& ]4 o% X+ y; a
/* 报告通信结果*/
5 o7 Z, u* J# v! M! C% V: r
if(upp_error_count != 0)
# T1 i" e; \& f: ?4 k
UARTprintf( "upp_error_count=%d\n",upp_error_count);
: E8 g. s- T) x* U" `% p9 c
else
3 m9 @- B; }2 i8 r% z$ N$ o
UARTPuts("uPP transfers complete!\n",-2);
% _# ~/ ]* P6 R4 d( i+ a
0 ~ y- W/ T6 A) c0 f
UARTPuts("Do you want to print all the data?(y/n) ",-2);
' d5 r0 T/ ~# G1 F4 t/ a
UARTGets(ch,2);
6 [ v% r; J; o9 Q$ A2 D
UARTPuts("\n", -2);
# L6 z9 ~" n4 }, z8 f+ M
. o8 G I/ \' H2 ^7 T/ X
if(ch[0] == 'y')
0 l& w: `7 t" G( x
{
' H+ F) _: M' ^ P; r6 Q' M
/*打印全部读到的数据*/
( C( A3 J$ K9 [% f# B( h& }
for(i=0; i<upp_frame_size; )
) a: C4 [/ s: R" e9 C* e9 G, j& h6 a
{
) J8 A$ A3 {0 j3 Q+ h) p( z
for(j=0; j<5; j++)
& \! e# s: C- H( O- t0 L; X
{
4 w% ?$ r6 e3 l' j( C5 J
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
Z- }& H7 O5 I# N
i++;
1 m" Y# @: ^8 a! v/ ?' v8 p
//if(i >= 4096)
a$ l5 W- Z2 B- i; g. C- R
// break;
) i& {& w$ Q6 b( `( P# `% n1 J, C& V- a
. `2 H+ k5 K) s/ h
}
1 C5 E) ?: _/ F# p/ ]) }
UARTPuts("\n",-2);
2 _; p$ g& S- z
}
! h: A, Z/ s! L4 [5 d9 W h
}
; L2 ^+ E9 b0 |8 i) s; e
! r6 |! k3 x, J q& n' M, K0 W- Q7 u
}
& ^4 z+ M: a6 ]
# @& d3 S; C9 X) G8 a* k& E2 Y8 e
4 {% y1 d# [) }8 V2 l0 E9 e Q
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
& k! q8 A8 I+ i8 M: c2 l, q
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
6 J: H8 `2 [7 h8 f1 q4 b
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4