嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
3 x8 B1 W+ c1 {3 U
Void UPP_TASK(Void)
: f" q5 `: ]* L7 y r8 |2 ]2 r
{
) A% @( u! u& \% O+ m! u; ~
5 a( T% z9 t) }7 T/ R0 o" P
int i,j,k,target_int_count=2;
% M. Z$ v1 J/ y$ K1 Q
char ch[2];
0 n5 N( o% j3 M3 d a
* i. z. L9 W7 @% l/ ^# U% |7 t
/ G0 ]0 `5 `. w$ v2 j' h# H- G
- h* y! S; m: z2 z2 ^* }
upp_interrupt_count = 0;
/ i* _6 L0 C' ^1 d
upp_error_count = 0;
7 Y0 K/ `( [. o
8 S: A; [: b7 r* [2 J
UARTPuts("\tResetting uPP buffers...\r\n",-2);
2 t' A; r$ \' b. L1 k8 Q
// Initialize data buffers
- i7 P+ L% w; e4 i. \9 l
for (i = 0; i < upp_frame_size; i++)
. K" P8 ~' l6 g+ G
{
3 U3 i4 t3 Y5 A3 a5 |3 L' ^0 K
upp_buffer_b
=i;
, B9 D8 b! C$ X6 \) \3 I
upp_buffer_a
= 0xDEAD;
7 x3 q S% e: x& o
}
8 \/ Q& p* ^' O# j
4 } B/ D6 \' x1 b& G
//for(i=0;i<1024;i++)
, f/ K* P& A; z1 a1 `
// temp
=0;
! r5 p( |' y9 X
2 `9 [' p& d& r) H% z
//UPPReset();
, k i1 n( k. w# |! G2 W+ U1 T
/*启动UPP DMA传输*/
' v" U8 o% M' m4 C! z. W+ F
UARTPuts("upp_prog_dma_i\n",-2);
4 `2 @) ^2 ^4 {
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
7 e) h& i6 U: M2 D& h
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' o: U; t9 q; C5 d
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
; o4 I0 B+ `6 D: H1 i5 {
% m! p+ e8 @! L; g- B4 i( X- U8 Y
UARTPuts("upp_prog_dma_i\n",-2);
' f. L! n- L) v# c$ \) s
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
0 Z8 Y; L- E! p+ b1 B
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# W; b5 w3 R, l+ |' \; v
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
9 @* C3 I( @0 z" }8 |- C3 @! U
7 j Z0 D0 O: b$ k, @) z, K* s
/*等待UPP传输完毕*/
/ C8 U& a. L4 [
//i=0;
* W. Q6 O& e4 M1 H
//j=0;
+ L( |' r& X8 W/ F a
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
E$ U3 K- s! \2 |, o Q3 N7 F) N
{
4 r# l- h* d. M$ j `, U
/* 测试UPP传输的同时操作普通DDR数据
, k- F, F5 h5 i5 G
temp
=i;
0 l& l; f& e8 b3 P8 P# M A4 {
i++;
& F/ _& H. m4 q1 u4 @! J5 O
if(i==1024)
* t8 M5 r- S4 k z. c
{
3 {; c# Y* E1 X5 V" P: R
i=0;
8 D* F! k6 d' Q3 J) U% J/ D
j++;
' V4 N1 ~( S, Z7 Z3 y' Y
}
2 O! t" \" Q3 S8 _- y) A
*/
: h5 C( M& ~/ H X: m/ u: b; G4 ?
x- I) V. n* ?* {1 D/ w' ~
asm(" nop");
& K2 B% K ^5 }0 P9 o5 i6 }8 {" B: Q
# \. E1 q- E Z0 z# l7 @
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
) N2 k1 m( B3 f. ~* C1 |! P* P
}
. Z( X1 o& V4 g$ l
1 v: P- ]& R0 d' j3 R H
/*检查UPP传输的数据是否正确 (loopback modes only)*/
$ X3 s# o; m% A- K1 K, X! j
//UARTprintf( "i=%d\n",i);
7 {+ t$ t* j# M' A! L( b
//UARTprintf( "j=%d\n",j);
4 b1 G& C2 M% K" |
UARTPuts("Data mismatch in buffers.\n",-2);
. F; O, @7 W/ M1 Q/ j
if (upp_interrupt_count == 2 && upp_error_count == 0)
$ k3 |0 d5 h4 ? A$ r9 Q$ |+ Q' |
{
. a5 Q; F% o5 I1 S! n
for (i = 0; i<upp_frame_size; i++)
+ \. a. ?$ i( t7 ?
{
. }& b) ?% O( N4 L+ L
if (upp_buffer_a
!= upp_buffer_b
)
3 m7 ~ T$ p2 Z: J4 q# r! s0 p
{
. n9 E6 h0 c7 i& j" C* G& L
upp_error_count++;
% z2 a1 `. U" ^, z9 q) Y9 B! Y0 |
}
# V' K4 `& P* s; I! a( ]# H
}
) Z m) B+ @+ Q5 \9 R$ F
}
: Z! p. J8 K3 K9 z6 c8 F; q
- q" e' y% O5 ]" r% K, D. C
/* 报告通信结果*/
2 g& a9 w/ M$ k* o& b+ I; x, g
if(upp_error_count != 0)
) q7 l2 X" ^7 R& H0 h
UARTprintf( "upp_error_count=%d\n",upp_error_count);
& ^8 o- W2 L H
else
$ I y2 I) ?# J x9 D8 k5 d
UARTPuts("uPP transfers complete!\n",-2);
8 M5 U0 _) l/ S7 V$ u
0 T0 W( x' g& V; m; Q' x8 }, D
UARTPuts("Do you want to print all the data?(y/n) ",-2);
5 b+ T( D) w$ p' {
UARTGets(ch,2);
2 w2 E4 ]6 M T0 r) J7 X4 X+ D
UARTPuts("\n", -2);
3 J$ F( Z/ f9 k1 _) c
* Q2 V% E% r4 d! Z
if(ch[0] == 'y')
! v" }, t( v/ Z7 A, H4 z$ S$ W
{
7 \0 E! X# U5 g% W
/*打印全部读到的数据*/
; ~4 b4 x; c% w6 a+ i9 U8 ^( b1 h$ U
for(i=0; i<upp_frame_size; )
- @- P0 S3 g8 |0 [# T0 m2 M
{
0 z& a) K; ^* Y2 W
for(j=0; j<5; j++)
" Y9 d: i( d/ b7 _ w8 {) D) I
{
' m+ I9 Z, Q% l3 K6 d0 G
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
$ d6 M- l1 F2 [$ k
i++;
1 }1 m0 q) _# ^
//if(i >= 4096)
% ]" M0 d- H p6 j6 R
// break;
$ }* m4 ^! M! l3 W) @. P
4 e8 s! g$ ], q2 n; q" U
}
* p; c' K5 r2 u
UARTPuts("\n",-2);
( b6 S) t/ j' ]# z; A. }
}
7 k+ Z$ T \% H$ A6 b& n1 ?9 Z1 `- _
}
6 J& U" l: a4 Y9 x r9 b/ y) o
7 x/ f; V* s/ X
}
$ ^# [, e8 ]/ i3 u( ^1 S" f) _
4 Z- e) I- R$ R. i' ?6 J, l
5 E* u9 O; ~, o" G ^ J7 E( T" X
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
5 D6 U! [ D8 Z A: J, g
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
" ~) P& `5 k8 a( c7 G
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4