嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
3 _9 \ k9 z+ ^. Z3 b4 E
Void UPP_TASK(Void)
/ ]3 c9 E6 w) F7 L7 ~! w# h+ t A+ H
{
2 ~7 b8 c7 h/ Y4 {1 d5 u. S' R+ a
+ I) T" b/ f' Y e0 |4 @1 M2 z
int i,j,k,target_int_count=2;
2 H. f+ o5 E$ V* j' B
char ch[2];
. h- w5 `, H. w9 A9 }
7 I6 l$ t1 h& a& z9 ^* T' L
8 {, N" k! i6 U n
- o: k% ^/ Z5 [! B1 m6 e
upp_interrupt_count = 0;
3 E$ u: v0 ]& Q& b: F( w
upp_error_count = 0;
# Y% \' S4 Q {/ g% L$ j! D1 F) k5 i
$ q5 c8 @5 x5 e( X
UARTPuts("\tResetting uPP buffers...\r\n",-2);
% @. V' `/ Y7 Q' y- x- q6 a
// Initialize data buffers
4 A/ g) m- v; @/ Q. s
for (i = 0; i < upp_frame_size; i++)
. Z9 e' A" s* x
{
c" C$ S: ]: u7 R b
upp_buffer_b
=i;
' r6 ]% @9 o; R3 `6 F2 o, N7 h+ S% A
upp_buffer_a
= 0xDEAD;
; G* A7 P* T' V# z
}
/ k# Z7 d) A& v% m; S. f1 F
3 E: R4 j" y- N6 r7 {* d. I
//for(i=0;i<1024;i++)
! t! |( c' G$ Z( o! g: e: {
// temp
=0;
! N3 l8 J1 s: u0 R$ {" c
$ C% T5 V: |; t; w4 |1 E& v
//UPPReset();
1 g4 c2 [7 b1 k; ]) G' J! |
/*启动UPP DMA传输*/
4 l5 U" T" N' y5 ^2 I6 l
UARTPuts("upp_prog_dma_i\n",-2);
0 o5 l1 b! G" t! ?6 z3 A
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
, l, T; O# t0 a" I
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' q" B/ i! K. D* h
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
1 Y& [, v8 d" O" `" P/ M( l
$ }+ l( z6 |/ j% E: @
UARTPuts("upp_prog_dma_i\n",-2);
+ p* ?0 W1 e# a4 t j7 W8 x
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
! ~; {$ V8 n7 e- f: A
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
}# u# p# M; `$ t+ A
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
* C( A9 Z; `7 b @# g' B; x
' W% c8 R: f' k6 L% @
/*等待UPP传输完毕*/
; [; D ~; l3 A
//i=0;
: L1 R2 t/ h( A
//j=0;
$ _' O2 u- T: [0 \! P
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
) f4 e4 f5 m8 z) I. o
{
& Y% ^8 k/ h4 k! v6 j% E; C
/* 测试UPP传输的同时操作普通DDR数据
# i( n) x& I4 x6 T6 A+ w1 f
temp
=i;
7 {" U# Q7 w) q2 r+ W- l! w
i++;
7 t% Y: g3 Z3 A% _$ H/ l; s
if(i==1024)
! g% ?* Z% |5 N6 `/ h, d3 Q2 ]
{
0 k% M! a, j ?; `0 v4 t1 I
i=0;
' t& w+ S1 f4 J0 X
j++;
2 V2 U9 j' U P/ B+ E! h7 w
}
1 C- u ]+ T" k& n
*/
5 u3 g) W( a, P% t% M1 ^! C
, T T" B+ p3 [& S# e
asm(" nop");
9 m1 H9 j3 ^; J& R9 F2 [2 Q
# I8 n; v+ q6 u7 m" W
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
0 q2 I0 @4 z( ~; H: [' \
}
! P6 \% w4 ]8 s* Z+ V( P
. l" `) ~& L* r
/*检查UPP传输的数据是否正确 (loopback modes only)*/
( D" A: L8 A# s& P
//UARTprintf( "i=%d\n",i);
# }9 F+ _6 n4 K0 {$ d, ?1 |- D
//UARTprintf( "j=%d\n",j);
& x# q5 j2 H i: ^: U5 x
UARTPuts("Data mismatch in buffers.\n",-2);
5 r: q9 s2 K; K2 X. ?
if (upp_interrupt_count == 2 && upp_error_count == 0)
, y) v7 B" G1 y* I! j, J
{
; Q8 y1 E/ _& o
for (i = 0; i<upp_frame_size; i++)
) t/ W1 l0 l5 }) T+ _3 {2 o# Z
{
0 k [3 M5 s& h. Z7 n- k
if (upp_buffer_a
!= upp_buffer_b
)
, E& B+ @1 M1 j# V. f
{
4 V4 F4 Y1 J) w `# N( l
upp_error_count++;
9 D7 \- V% S# O+ y; A' }9 a
}
- Y) E( ]: C; Q
}
6 U I3 f5 `5 O( r! n
}
$ N* C# t0 q; b' D
% b. P) D2 Y8 S' g: D7 z# F
/* 报告通信结果*/
( U% y$ D$ o" K) c
if(upp_error_count != 0)
* ?# C1 ^, R; d" m$ D" w8 O
UARTprintf( "upp_error_count=%d\n",upp_error_count);
/ N+ N3 e0 o) K( ~5 F0 v, o% E2 p. y% T
else
1 G# E+ g$ d# e) V) Y9 `$ }# _
UARTPuts("uPP transfers complete!\n",-2);
3 O: d$ r) S4 \4 |, ]
4 W. M) \% Y1 i
UARTPuts("Do you want to print all the data?(y/n) ",-2);
/ S1 o J0 [3 i& \7 o/ i
UARTGets(ch,2);
7 D9 u6 J9 c7 N
UARTPuts("\n", -2);
) S: N0 W, s( w
; E( g. P s) W: [/ ^
if(ch[0] == 'y')
/ F' K( b8 N. X- x
{
$ x, E2 l4 N$ O z2 J* r0 Q6 }
/*打印全部读到的数据*/
: Y3 J; [. F' n! R) M6 o W
for(i=0; i<upp_frame_size; )
$ e& [/ x' y5 C$ N+ W) J! K* \
{
! ~6 i( Q" L# y0 c0 _$ N$ C% u+ h
for(j=0; j<5; j++)
' K+ b% y' |: ^- Q& i' s
{
; B/ }. o) }& r' u, d
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
- z$ x3 C- N- O5 L! `! v( B, L
i++;
- N; L! w, [! ], \/ j
//if(i >= 4096)
0 c1 X0 j3 g- g; {
// break;
5 F) d n m: s' E, S
& L% A! Y# _: d) f& |2 B
}
" u( P* c' f! \0 D6 {9 i N6 o
UARTPuts("\n",-2);
; Y7 W6 F4 K% ?9 O
}
4 U+ Q; @5 C# u0 \3 U, @+ ^
}
8 r6 ^5 M7 z# `6 E
9 z, `5 }% ?4 Y. i; E: z: Y: k2 y
}
" y3 h+ r E8 m& z
4 f" {- Z8 Q+ j7 W0 i
2 r& X8 F2 Y4 U& L* g/ b( d9 y
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
! o$ g U3 ]+ T6 O. s; k! M
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
8 U* }' P0 D# z1 i
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4