嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
4 h2 g4 _ V2 Q F( b9 w0 i
Void UPP_TASK(Void)
+ H% }4 M- _) r8 r6 W
{
9 R; Z- O* g& e7 O/ _
y: q1 a! Q1 Z/ {1 @ l
int i,j,k,target_int_count=2;
/ f$ E h, l/ A; ] x6 W. y
char ch[2];
/ l3 G+ N+ X# V( ~8 w: i
3 q- m- x3 b, H
5 S% E; L0 x s1 y7 c) R( g
- \, O; i: U$ D0 d6 l: c% J
upp_interrupt_count = 0;
, v! }2 A( c; W- l# T
upp_error_count = 0;
; C& g+ F+ e. Y
+ e$ i9 a2 y$ I" `" K- _6 K+ F
UARTPuts("\tResetting uPP buffers...\r\n",-2);
; X0 q2 l; {. R i( o
// Initialize data buffers
2 f& }( v) u7 P+ q4 F2 a
for (i = 0; i < upp_frame_size; i++)
7 w1 W/ |* }0 w+ X9 A
{
5 A& ~' \6 A, J m1 @
upp_buffer_b
=i;
; T7 W" e$ N( C( I" c" |/ @; H
upp_buffer_a
= 0xDEAD;
7 P3 T M9 G1 K- W1 v/ [2 e) }
}
7 a4 ~. j R- t( A0 Y- ?# M
3 ], Z" [, |1 o: P+ [/ _3 E
//for(i=0;i<1024;i++)
3 p+ L# N( ?$ R# A# G
// temp
=0;
& t; h' Q- m3 z% ^( u4 U1 s+ F' K2 { ?
1 l7 h$ a9 r0 V
//UPPReset();
3 U8 U( a8 ?* G7 @; t4 |
/*启动UPP DMA传输*/
& J, P+ u9 r% J4 r' K
UARTPuts("upp_prog_dma_i\n",-2);
$ N4 X% n" j( C* F! L, \
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
N* v4 A- G& W F) a6 ~
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- F4 A% S) l+ X# n) Q% \
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
- H" N* N2 h0 Z. ]" {; f
. k Q) \$ m; }4 |8 r
UARTPuts("upp_prog_dma_i\n",-2);
+ m6 ~! U0 \: ^9 W; N' s" i
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
) `! v. o: l' V, w1 g' q' w
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 T9 N6 A U E7 G, x* r
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
& ?: `$ ^9 h5 r; S d9 u
4 C# O: p. [2 w8 u
/*等待UPP传输完毕*/
6 U4 J c2 I, v4 Q
//i=0;
6 |" G) u% M; I t6 R
//j=0;
z7 d5 O& h8 D0 Y
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
9 q+ j4 K' w' S9 y7 r7 c
{
0 c$ v; j; V: C4 |. n
/* 测试UPP传输的同时操作普通DDR数据
. S# c; q6 _) | ?0 R N
temp
=i;
4 r* a4 V" X' |
i++;
: U. y2 ~, H% L3 c/ k8 |
if(i==1024)
) s' ?$ V) y7 T: h$ i) H7 E
{
! h. q( y0 \* J9 T1 |( m. g
i=0;
- m# U' Q& M! I+ J6 G! H7 {
j++;
2 [6 F6 L4 a, ?: p4 b# h
}
, W* d2 L. ~/ W* N: l
*/
; `! }1 W% q) |6 U& Z$ Z
/ p% f4 U5 ^5 i% w s) l
asm(" nop");
% c& ^/ i: l6 K- Q4 W* N7 i+ i
$ Q6 b$ W0 E* Q" }6 A$ l( I8 q
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
3 s2 `' y$ w# C1 x1 I8 @
}
. `/ s, p* U* E1 x: Y
0 U4 F: Z/ |+ x9 t
/*检查UPP传输的数据是否正确 (loopback modes only)*/
. H8 [ _! H& g9 x' B( m% P5 [
//UARTprintf( "i=%d\n",i);
. N0 I* _/ U& `3 s) j$ A
//UARTprintf( "j=%d\n",j);
! R1 \3 m1 t: N0 J/ K: M9 u
UARTPuts("Data mismatch in buffers.\n",-2);
( E- |3 ^0 Z" R, y/ P: t- M) W
if (upp_interrupt_count == 2 && upp_error_count == 0)
4 }* I. C9 ]" @
{
. f% u1 V$ I, ]4 h/ y1 }& \
for (i = 0; i<upp_frame_size; i++)
' q4 A' @* V8 M
{
k% L$ z: A0 K! E& F
if (upp_buffer_a
!= upp_buffer_b
)
! }$ Z+ c2 Y9 k$ u
{
$ ?( b0 J% {% m1 w3 o0 ]
upp_error_count++;
/ N5 t+ S: V' d5 q1 H( F8 G. }6 m
}
0 M* N$ X/ f3 E: y8 u/ d- s
}
5 u1 r9 `5 f8 l# Z* L" a* h# b
}
l8 U. n3 r, v# q4 }; @* W& |
! o( R5 V _: z. s5 j
/* 报告通信结果*/
; p7 H% u5 K4 a; I
if(upp_error_count != 0)
( t) B. G: U1 |. [8 O: w# l; G
UARTprintf( "upp_error_count=%d\n",upp_error_count);
/ }7 k" ^" W5 A0 s" l3 }/ ]
else
$ |/ J6 ~0 w- ~' f
UARTPuts("uPP transfers complete!\n",-2);
0 G& q3 g% Z( c# k) U) B
7 Q" c* s" I8 Y; c) @
UARTPuts("Do you want to print all the data?(y/n) ",-2);
1 S1 ^6 ~' ?+ _' L
UARTGets(ch,2);
+ Y3 @6 j, k$ w# O
UARTPuts("\n", -2);
6 ~3 F2 g- \2 p9 M d
4 x, \0 A4 \5 z% N' y
if(ch[0] == 'y')
2 q, J+ g; E D6 U9 ]
{
! W' o: l: k1 A* s- ?
/*打印全部读到的数据*/
! f8 {# R2 v2 d6 ]: _5 e; {
for(i=0; i<upp_frame_size; )
3 Q* `+ m% s' j
{
6 {7 D# u8 e$ d" I! I; o
for(j=0; j<5; j++)
9 u! _/ u9 `. C% v& |
{
/ x3 q/ E5 N ^: `7 }
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
+ E$ s7 |7 G7 c, b% d8 U6 q
i++;
4 k- z) F/ C! {* h9 r3 `$ l7 O3 U
//if(i >= 4096)
3 L' V9 C+ X- v. Y% ]. c% f A
// break;
: J5 e1 x( @! l8 U
! O4 c/ Z/ q0 F8 l! u6 w7 h
}
: Y( I; `8 q, U) _
UARTPuts("\n",-2);
|( b F: q3 g; F" S$ [* K6 i
}
' T) J/ ?: }4 L0 |
}
" [3 F. _0 _4 x9 t0 I: b$ C8 v
7 a$ Q' d7 P- ] ~
}
6 K2 C, F2 y& z7 U, a; j
\4 \$ T2 r! r* E- E5 N1 I
5 V7 E) U0 x8 Z* i+ q4 T6 I: q* I/ o
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
3 u3 N! C: V. B. r* `- A" F
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
+ M( f- F" k. M& ~
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4