嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- `. D- g, }# Y5 X* d) V0 ~
Void UPP_TASK(Void)
7 G& \4 J1 {# ]$ F
{
; j a8 k3 e. Y" ^3 [
4 c0 j* O3 ?/ b! U/ G! w
int i,j,k,target_int_count=2;
5 ?( P) C* {" Q4 _
char ch[2];
, A' h) {- ~& L! v4 b
0 \' {# @' p: u2 W
z+ h8 j5 R6 _' h+ r
3 f. n* M4 ?. H% b$ Y
upp_interrupt_count = 0;
5 y8 T7 a, v) P1 f: ~
upp_error_count = 0;
" Q" z1 Z1 K; A
4 t# y! O, E' w% s2 `
UARTPuts("\tResetting uPP buffers...\r\n",-2);
- S; A o3 C" ~/ M$ G/ a
// Initialize data buffers
1 K+ a: g( ^' r# N- Z- j
for (i = 0; i < upp_frame_size; i++)
) A9 K2 C% y8 _6 O% c
{
+ `3 C# g% {' f I' M1 o
upp_buffer_b
=i;
7 B, ^- J3 _& z/ d4 W
upp_buffer_a
= 0xDEAD;
A' y& w( i; S
}
, q8 o; E1 d' v, {/ @. z
3 y M3 l7 \4 x) y% j
//for(i=0;i<1024;i++)
3 B1 K0 O' S8 D1 o! v5 L% S
// temp
=0;
1 L T7 [- N% ~2 p3 n9 I5 J
: j- {0 b% c# \3 x7 W
//UPPReset();
' o$ {' R) D, ^1 Q' u! e
/*启动UPP DMA传输*/
" T/ q3 F2 T; k' m8 |; v& G
UARTPuts("upp_prog_dma_i\n",-2);
- m; C( h$ E$ ~* Q. m, G
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
9 \. E$ w( k$ Z
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! U9 D/ `' {- o# _$ j
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
6 I( }3 E$ n9 O9 i8 x. U
1 d. j' ^( g) A" }* B3 ]
UARTPuts("upp_prog_dma_i\n",-2);
3 P9 N1 H+ K7 E
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
4 G! r% F9 v4 J3 `% b9 P
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) b8 P" C: Q! e/ ^" E9 |
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
- Q1 _6 W Q! r/ g0 b0 j
5 }' E1 N' z8 l% X+ k; [
/*等待UPP传输完毕*/
7 G* ]$ }+ V( i- M8 y
//i=0;
% B2 h6 X" Z% ?( }! R/ h4 I
//j=0;
+ K# A9 Z* |1 v" o* f+ g" Y
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
9 n& P& U) P7 h* u
{
! h' b0 f; s7 u7 e- W
/* 测试UPP传输的同时操作普通DDR数据
/ `$ _8 a# x: _! f
temp
=i;
. A9 D8 ~, b& q2 R; F& ^- A. L
i++;
1 y7 G/ h( x+ j
if(i==1024)
- n+ u' m6 _6 Q0 i {: z v
{
1 s' U) v$ s M' A' E; B1 D1 i
i=0;
+ l8 `/ L% w4 g i# R5 k
j++;
; E: | K2 M2 F, w
}
! C- \2 L' @% N' O" j a
*/
9 U. G2 X2 B" n; M" Z! L7 L+ ?6 J/ N
0 D/ ]9 t2 f2 c8 E# w
asm(" nop");
& {# h1 Y! w4 |5 s/ F, B+ w& y
$ [& c- w8 Q* b- c. x% {9 X# W
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
; h7 U9 P ]0 u7 U) M w- j; B
}
# s( _/ `. M Z: j9 i: d- P; V2 A
1 I' K/ y% V7 K* P
/*检查UPP传输的数据是否正确 (loopback modes only)*/
" F$ j; g3 m5 u
//UARTprintf( "i=%d\n",i);
% S! [6 r8 A! K$ f. i0 K
//UARTprintf( "j=%d\n",j);
! P7 j" \& Z' X: Z* W
UARTPuts("Data mismatch in buffers.\n",-2);
, E f9 q f# \" o3 G
if (upp_interrupt_count == 2 && upp_error_count == 0)
# [0 q# m0 O7 T- I- n; V
{
1 x- u. F9 u2 H
for (i = 0; i<upp_frame_size; i++)
1 n0 M. J7 e7 A1 O
{
! q+ E+ {4 f' S1 c& j% {: g
if (upp_buffer_a
!= upp_buffer_b
)
0 W( n$ F+ t3 @$ d1 n% `
{
5 D8 k9 T8 V0 ^% k& d
upp_error_count++;
5 M" b/ Z4 b5 q) w
}
6 D& M) ~/ F$ G8 h7 O+ L
}
4 e0 T% V2 ~+ \
}
* K9 g6 `( C R5 \
* M2 J+ P, }' Z! g9 l- Z! R, `. {* X
/* 报告通信结果*/
- s& l' ^- d0 p; R: L. j9 q/ n
if(upp_error_count != 0)
f7 s" F1 }6 O% [
UARTprintf( "upp_error_count=%d\n",upp_error_count);
1 w/ r! ]3 ?7 ?8 u1 n5 O* q% j
else
+ G% I9 o# h. v! T3 K
UARTPuts("uPP transfers complete!\n",-2);
3 |- W! o2 A8 _5 T
" K. b$ k" }( t& \
UARTPuts("Do you want to print all the data?(y/n) ",-2);
+ r) }6 W4 e8 [/ R; G' ~& `- {
UARTGets(ch,2);
$ }) l+ ~& j5 H6 a' q: S
UARTPuts("\n", -2);
; P" _( l1 i, g/ a
' t' N6 w* o9 @4 S( e
if(ch[0] == 'y')
8 `* y8 v: g [' F
{
9 V9 u/ A8 V0 B0 @
/*打印全部读到的数据*/
* E. f- S- I6 W$ R, H& w$ `% O/ w+ S
for(i=0; i<upp_frame_size; )
! ~. f6 L$ R1 o4 D) s
{
- {7 g8 y# \: P; \
for(j=0; j<5; j++)
' I7 b" h) Z4 @$ q7 f" |+ ], L. L
{
0 q$ U# |$ H0 h ~$ T' b
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
* A5 E+ |0 r' B8 }$ ~
i++;
+ j) U! \' M* y/ O' Q
//if(i >= 4096)
/ [ Y+ N' n9 I+ R0 o
// break;
' B+ b! {& m9 q9 P
2 @% s) _; ~% `& i8 K% O
}
3 q+ w6 M0 ]6 Z9 g$ _/ P& E
UARTPuts("\n",-2);
& _0 \3 ]$ Y4 R4 a& [5 q
}
+ ]5 P$ i( N& U8 a: Q& S
}
6 k8 \8 ~7 r1 l: Z
1 f' w1 Z% c! Y
}
7 H; a8 r1 U/ [9 }
) l; x* b6 C$ E
# v; u I9 f7 Y# W5 `
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
; o0 X6 J0 M/ ^5 O+ |3 O; N
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
+ {- W# ^2 {) k5 f2 E
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4