嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
4 I( O& c3 a3 r/ y
Void UPP_TASK(Void)
* {3 `" c5 A7 X+ Y7 ]+ `/ r
{
" M& u! w7 k0 y7 I6 w2 o' U9 @
4 y9 ^$ [7 E0 _: d
int i,j,k,target_int_count=2;
7 Q+ k* E3 W- K/ b0 t [
char ch[2];
7 [) l' g( i) P
- V M, @1 J" z7 W( v( r
0 e5 e3 u! [3 g$ Z9 V( u
& t, l) v. j; D9 d
upp_interrupt_count = 0;
2 ], I+ t3 X- U n! [
upp_error_count = 0;
" E. ?3 }+ L' u$ g
7 x) w \: U3 ?# j4 F
UARTPuts("\tResetting uPP buffers...\r\n",-2);
7 Q6 \! O& ?; p# }# p K0 o+ [
// Initialize data buffers
" z$ p: j3 l8 X: b$ ~4 U" f' P
for (i = 0; i < upp_frame_size; i++)
1 j* U+ i4 {5 I$ E3 g/ e3 |/ ]0 M3 V
{
9 x! B9 m. {- N+ F- n% N' J* d
upp_buffer_b
=i;
( g$ Y3 I# `; X7 T3 |# B- w9 K
upp_buffer_a
= 0xDEAD;
, L D! X- k5 w- V) m! N* m% F+ h
}
Z$ j% ?# t8 s4 E' J7 G; a3 A
) w7 `3 t$ L+ v1 f7 D: W# C
//for(i=0;i<1024;i++)
0 n7 O& \/ N( ?
// temp
=0;
/ N* z2 M7 d* ^$ l( j- |
7 _4 Y: ]+ V8 ?9 j
//UPPReset();
! a* j( S( t" v
/*启动UPP DMA传输*/
% o5 n# t) S( q- r% C" F- S! H
UARTPuts("upp_prog_dma_i\n",-2);
4 j, |1 R k/ S3 F5 ` V
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
4 x3 v' X9 ]6 B6 B, ^: _1 ` N0 |
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: `2 |" P2 n7 w9 y/ ]" d, O/ V
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
4 E) c% a4 L& |+ J/ u- ^/ K
7 f5 z9 G8 d; K* R1 \/ V
UARTPuts("upp_prog_dma_i\n",-2);
$ h8 h4 |; J' w6 i
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
! T# h2 d4 I% F$ o+ G+ D8 a
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 W2 a$ { S; M5 e8 N
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
4 P1 w5 g& s/ f' @
: k4 s: q1 g: R9 e
/*等待UPP传输完毕*/
& Z) `. F7 c9 _8 N3 X
//i=0;
& z+ n9 r3 T( C1 Q0 j
//j=0;
/ @" s+ m2 {# |+ O$ b V
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
2 N1 |: }9 R5 D& q7 H+ N* l
{
% i8 ^- |/ Y9 N0 @
/* 测试UPP传输的同时操作普通DDR数据
9 a5 f; }/ u6 |$ [5 ~% |) C
temp
=i;
$ j% z' }# ?; M
i++;
" U: x0 t. U2 ^
if(i==1024)
+ K0 K- j+ r2 A; H
{
# p7 o+ d. Z; {
i=0;
- R: b9 m/ @, v, |
j++;
0 L2 a& L! R( Q8 W" T7 k/ W, _* S0 A
}
! W9 M: j/ ~( g$ }7 Z
*/
1 ^2 M. x( l2 n! ~3 s
! N& s' S* [% S8 M7 k
asm(" nop");
# k2 ~4 k) ` s! @7 b6 D
, w" I6 y, e/ C) e+ G* h
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
" f% l1 O. k2 }2 a4 l8 E& r
}
% B$ j% o& H- R
" J& d' t; a1 @- z3 Y4 \
/*检查UPP传输的数据是否正确 (loopback modes only)*/
' f" h3 s0 K8 M2 r Q) v3 D+ t
//UARTprintf( "i=%d\n",i);
: t& C, T* t& U: |- P7 `6 X
//UARTprintf( "j=%d\n",j);
( Q) Z6 q& G3 ?5 `7 z
UARTPuts("Data mismatch in buffers.\n",-2);
r# N$ g: N4 U4 ~$ W/ w$ f
if (upp_interrupt_count == 2 && upp_error_count == 0)
4 c8 I0 N) e2 n+ d1 T+ W
{
]7 x1 Z, B S$ W) K+ P; _/ m
for (i = 0; i<upp_frame_size; i++)
" H3 i% P, D3 C* m6 x7 R
{
+ Y- a* O. i v- W3 b( u; ?7 k
if (upp_buffer_a
!= upp_buffer_b
)
: M! F8 V2 R( [
{
( U7 v9 y7 [# V+ O/ \7 D$ s, a
upp_error_count++;
5 m' H- h$ V% |7 i$ `
}
3 K1 `. i) J( k' ^
}
0 ^# |9 C8 W* M. {
}
J8 y4 w& o7 V& B, y# I k2 X9 C9 `
. H3 Q1 X; Z7 m' @& o- L
/* 报告通信结果*/
9 m8 |3 a% T* g! V6 x/ @, ?
if(upp_error_count != 0)
5 X0 Z6 k; o4 x; Z& H8 g
UARTprintf( "upp_error_count=%d\n",upp_error_count);
) D- H( H( R8 Y" z2 n2 B- i" N
else
1 ?( c3 \, M/ U( s
UARTPuts("uPP transfers complete!\n",-2);
0 C5 A5 V- b. w5 D9 J8 C. h: e
& g& I, A* m% O7 r' k; [
UARTPuts("Do you want to print all the data?(y/n) ",-2);
; L0 B9 w+ z1 h- N4 K' x' O
UARTGets(ch,2);
" C8 ^3 V( _ C7 n, N8 j; D
UARTPuts("\n", -2);
+ B4 ]. F7 h4 D2 V- e. [
8 X6 q. T2 a5 a; X
if(ch[0] == 'y')
& N# B- r0 I* E* a( c5 Q
{
|" t4 V4 v4 F2 }% Y5 t1 l
/*打印全部读到的数据*/
& D" X0 r1 T) j: R; U$ y
for(i=0; i<upp_frame_size; )
5 I8 k& L: w, t7 a
{
& V" {/ z; X& e1 H, t* K! U
for(j=0; j<5; j++)
) S4 m+ {- j( \+ Q, e2 M% D* l
{
8 t+ X" G6 s c! }6 |0 I! X- a& v
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
3 q/ \% Z3 y; y. k! H
i++;
0 K' n4 |0 v% X0 P, e+ a$ W, ]" E
//if(i >= 4096)
+ y7 b9 e4 m- O- F$ [4 Y
// break;
+ D! D7 Z7 z' ?% s
) j# M' E! ~1 r b: [
}
5 \( c/ T+ z. {! x
UARTPuts("\n",-2);
' x: r1 P! a. J, R2 f$ A! B9 M
}
$ g8 T% q6 t* p* V
}
& f$ H4 |3 ]/ ^- v! k3 `. B( `: C
1 E# t m: A& I4 K2 N
}
]& ], y) C5 E5 X5 W( k3 K
! w' v( k4 }9 A
7 @; i( u3 o) u i& _% C) O, ^% h. n
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
9 J! `2 {, E3 r# M \' b/ h
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
1 z) x# L# i: O0 V/ e
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4