嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
' O) h: _1 d; M1 ]$ @2 O
Void UPP_TASK(Void)
' i# m: d+ _) P3 E7 j9 Z
{
w& ]: L6 e' f4 I+ o
; C: A: N$ q' [& T @ t: K$ v) K
int i,j,k,target_int_count=2;
) i% ^9 M% F0 A; c* b/ G! i
char ch[2];
( _ l( N! f% v" U
% v, P3 P9 a3 t$ ^3 _
* [& i, D4 P. B) {/ U/ Q5 ]
' ~% Y$ p! V q$ N* P z4 [
upp_interrupt_count = 0;
; Q; q5 d Y: X+ x0 K8 X$ x n
upp_error_count = 0;
/ w$ h/ n+ }* w! e
% b# d* Y2 a" b/ I+ D( J; |
UARTPuts("\tResetting uPP buffers...\r\n",-2);
$ {9 |! K+ K3 v% ^) I0 R0 _) l
// Initialize data buffers
- p2 N7 J% n; A) A4 p6 \
for (i = 0; i < upp_frame_size; i++)
& g T8 s4 ^8 u1 p
{
0 r' [& q" V0 ~# H$ k( x
upp_buffer_b
=i;
' ?% T0 }# S& c
upp_buffer_a
= 0xDEAD;
& @" W& ~" v6 p7 r! n% r! ~/ N
}
8 V: ]# o$ `, G8 Y" [8 s
4 }) n. C- J. @% `) n9 B) b" x
//for(i=0;i<1024;i++)
$ C* r( `) E9 A
// temp
=0;
5 l: t" G+ T( ~8 X
/ H& ^0 @6 E3 a+ {% F1 j- |- o" O
//UPPReset();
* l, ]0 }- j* h' l/ C
/*启动UPP DMA传输*/
, p9 L) Y4 A% a0 A
UARTPuts("upp_prog_dma_i\n",-2);
( F+ d& y8 e5 A- Z( T& J; i
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
6 G' V) v( z! U' M9 \4 U: I
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 u1 T1 i8 G: O# s7 y
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
! q! t: m* q9 j! A& `/ H/ t' ]
# _! ~/ {4 F Q" D& d3 S
UARTPuts("upp_prog_dma_i\n",-2);
1 G F3 d, I2 Y4 ?. p. ?
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
- I+ y5 R: P/ ?' o6 ]9 H* t+ j
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 I( _/ \, Y; P: P
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
) J2 _* w+ I/ o" B- Z" j8 L
8 Z i O! ~9 ~: A+ {
/*等待UPP传输完毕*/
g9 a& n7 H$ Y6 w' y) ^& O6 X
//i=0;
8 I7 ^; N" h3 S
//j=0;
: p9 |7 ^/ ]! w" ~) L+ j
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
5 k/ {* a) b* q# K+ Q2 I& s
{
! P# A, j" V3 z0 \
/* 测试UPP传输的同时操作普通DDR数据
- S7 z( H- t: w/ p- s7 w, h7 i/ x
temp
=i;
' @* v, k3 Z: `$ ^3 T2 V
i++;
6 G; w8 L5 ?1 R4 T
if(i==1024)
, [( [- ^& n" \2 R* p
{
& K. D5 G+ Y4 u( n6 j& l
i=0;
/ L! V' i+ N; S( E R/ e! K6 O
j++;
. h u/ I- U# r2 }
}
3 _$ p& T% ^8 W$ {
*/
+ T5 ~7 g# U5 |& `% t) e
3 n" |7 \! T3 s4 C, b1 d. Y
asm(" nop");
0 I1 w3 ~& i+ m5 p
) {' e" J$ K$ u4 |4 t" L+ C9 \4 O
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
( k+ T0 K0 z7 E& {4 d* N" ~0 ], o
}
) a x' y0 r. ?' \2 w! L
2 R/ r+ w z, U) z
/*检查UPP传输的数据是否正确 (loopback modes only)*/
- A" s Q' a$ x( H; e
//UARTprintf( "i=%d\n",i);
, Q3 m& Q5 _ q) z
//UARTprintf( "j=%d\n",j);
6 v q @! F2 B/ k
UARTPuts("Data mismatch in buffers.\n",-2);
7 W9 G5 z/ r! Y$ ^) g* f$ P
if (upp_interrupt_count == 2 && upp_error_count == 0)
+ @0 k3 T, b1 b
{
' K; U! C i6 [3 l6 J5 Y, V
for (i = 0; i<upp_frame_size; i++)
, j: |: ~7 o) G/ X v7 n9 a! T
{
* a. R- q; M0 l' x' i
if (upp_buffer_a
!= upp_buffer_b
)
: Z( u$ }7 y$ x7 ?" V0 D/ e0 y
{
+ P9 B0 _: q. D+ H
upp_error_count++;
+ C! g3 F; U' b2 M" k8 w
}
6 q- _/ j: A2 L) f4 J# I
}
3 M! I" [) x' X, b' e/ C
}
) `% C* w m" k& h
1 S$ H- b( l: @/ _5 q
/* 报告通信结果*/
0 G: \: z: Y; G% p3 D( V
if(upp_error_count != 0)
: q q+ i, U+ N r5 S$ [
UARTprintf( "upp_error_count=%d\n",upp_error_count);
7 H' | b) D& K& \
else
: E9 l; r9 q: a) z; I, l1 x: Y; y! Z
UARTPuts("uPP transfers complete!\n",-2);
& {7 n9 n$ }. ~, u. r
1 ?' M7 a) ?% t: a7 \. T4 h
UARTPuts("Do you want to print all the data?(y/n) ",-2);
2 G% _0 T& v- x9 H5 Y
UARTGets(ch,2);
$ a8 B0 i0 q9 Z
UARTPuts("\n", -2);
( \5 z" n) y' X* X1 b
% K$ q4 A$ ?) W+ a! g; K
if(ch[0] == 'y')
; a7 }& R( v& \" d
{
^. G3 [# k, r8 B' `
/*打印全部读到的数据*/
5 t( Z% A7 Q' n$ A0 ]6 j0 ?
for(i=0; i<upp_frame_size; )
+ B2 R. ^% k% ~8 K5 ~! K6 v. d' B
{
5 L3 W* n: i6 t: ?" p4 T
for(j=0; j<5; j++)
8 b* |: m! J7 u: V& t
{
" E: _, k& t, I8 h7 o0 C: ?* x5 j
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
6 ?3 |5 S) l3 P. v" k
i++;
( j: W0 w x5 V4 b
//if(i >= 4096)
: U7 ~# u7 ]( |
// break;
7 \' d8 H3 o5 T; |3 m
& _0 L, q: E* h4 P1 X
}
' H# @9 y' E/ Y
UARTPuts("\n",-2);
* f/ U% Y5 [2 ?
}
' X% r7 a5 g: G2 E6 R* c
}
0 d( P9 L. j) }+ z7 w
9 L7 C( P. @5 x0 K
}
7 B x7 A* X; e D c
) Y T, }( T; t- w* s
; p3 n( s8 ?9 f& i# N7 q6 W$ e
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
& |8 e2 a2 d0 l) c: H! L) \
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
9 J6 ]2 Y3 P, V9 L) J, G5 A
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4