嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% k3 b; X6 O/ [0 s4 u; u' N: L
Void UPP_TASK(Void)
6 @+ D9 ?4 G0 [% A1 v; L5 D+ B
{
2 W- _6 t4 l0 L% Q: S
- ~1 Q# I4 ?1 M- V: R0 c$ D$ P
int i,j,k,target_int_count=2;
d: C- H' D! z% M
char ch[2];
0 ^. d0 ]. U V, \+ q, H
: ?7 `+ v6 C3 w: ]7 V, c8 ?6 l
6 n. ^: q; T& d L: u
2 d. D) B$ W/ e/ g
upp_interrupt_count = 0;
; c# Z6 o2 M) L$ T7 v% n8 L
upp_error_count = 0;
! X& N: L4 m7 k D. H5 e" ]6 d( K' o$ b
3 j/ |- T% ~/ [9 g: e: J
UARTPuts("\tResetting uPP buffers...\r\n",-2);
' [2 N9 n6 [ R& S; o& q+ e7 Q/ b
// Initialize data buffers
. ?2 w, n; H- t8 n' D
for (i = 0; i < upp_frame_size; i++)
" T2 F, J' E$ O# s8 Y3 u& b; i
{
% @% I: [6 C- f7 `/ \
upp_buffer_b
=i;
8 K( k: c: C' C7 _/ g
upp_buffer_a
= 0xDEAD;
) d* U, s! \2 h
}
6 X1 O) K7 x9 A
4 F9 v% D5 Q4 d
//for(i=0;i<1024;i++)
& |- a: w* M$ A
// temp
=0;
I% |9 |# v: \
+ q2 D; i7 S% C6 K
//UPPReset();
, K/ m5 \) j% h9 ]! t1 r- P& } P
/*启动UPP DMA传输*/
& ~) l1 {/ l% s
UARTPuts("upp_prog_dma_i\n",-2);
' @* \0 h! J1 j3 W& X
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
8 ]( R4 @ F, Q4 q; L) g
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ q& N$ r6 M6 Z4 s
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
( o! ^4 D2 u; p2 |. T
: u8 M% c4 s% H' w
UARTPuts("upp_prog_dma_i\n",-2);
; e! n( M$ k0 B$ ^% P* o9 ^
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
8 B5 J) Y- ]. T) P8 h
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ V. i/ c% ~9 l
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
0 r/ }6 z7 {1 I, `) H* Z/ u; C. z
8 O7 o" I+ i. R2 S, l8 q% d
/*等待UPP传输完毕*/
: I* z1 ]4 b' {+ [3 H8 I8 Y
//i=0;
4 k( r9 f% |* i! ~5 r6 ^2 H
//j=0;
* _5 u2 e# }4 B- { f9 U
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
6 P* Q& J( E: L# e+ J% i
{
S* H; y+ L, h8 k( X9 o$ ?2 Q
/* 测试UPP传输的同时操作普通DDR数据
' ]/ r2 F) ^% a' A
temp
=i;
, E( O* G, s6 ]- ]) u0 @
i++;
8 a' S* u: q" h* E% V# J
if(i==1024)
* S2 H7 C& c( C2 g R0 V" K7 j& H+ {; z
{
7 K2 k6 g' o; B4 W. e" ]; I
i=0;
' r" a/ D# i/ | I
j++;
5 Y- e h V4 f# E
}
' G0 `& r( z6 F# \# R
*/
* U0 }: Q2 V g4 t
e! G& a5 n2 ~# {( U
asm(" nop");
5 X7 P, j x* {$ V9 I
' g$ S" {( I u0 S d. i2 W
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
' J( K2 O/ Q* C p# R! D: O
}
1 y! `% S) @% G" w
5 t( f X& Z' D9 y
/*检查UPP传输的数据是否正确 (loopback modes only)*/
+ l U$ `8 C- @
//UARTprintf( "i=%d\n",i);
' r- U B1 {. i1 |$ y, X* P0 ]% \
//UARTprintf( "j=%d\n",j);
{: X6 o. n# j( a0 E
UARTPuts("Data mismatch in buffers.\n",-2);
, f6 I; H7 |+ w
if (upp_interrupt_count == 2 && upp_error_count == 0)
! y# ~% h1 a! P: b, w
{
. z( n1 d, g) C+ p
for (i = 0; i<upp_frame_size; i++)
% a$ G# Y6 }' |! k, G* D$ X
{
& V9 U) g$ f+ g/ M l! F( o
if (upp_buffer_a
!= upp_buffer_b
)
* g0 f8 w2 ]1 ^0 [8 n7 @
{
4 L5 X7 p3 {1 h ^* |
upp_error_count++;
e+ ?5 R( }! N6 A Z# @
}
3 p0 P! H+ F; W6 j1 j3 V6 Q1 T
}
5 f0 z2 G% [5 j8 [
}
. ? I" Y% z; w2 g; \) c
% {9 l5 N8 Z/ Z% E' `1 w* b
/* 报告通信结果*/
8 Z$ ?; `9 S4 Y A. V
if(upp_error_count != 0)
. X7 \8 |" _4 r- O
UARTprintf( "upp_error_count=%d\n",upp_error_count);
4 U2 ~, e/ b! I, S% M H
else
" N9 H8 T7 B) X/ J" b1 N
UARTPuts("uPP transfers complete!\n",-2);
5 y' S6 C; S) I5 j
% s" _: K: r/ U+ |7 Y1 _
UARTPuts("Do you want to print all the data?(y/n) ",-2);
& A2 Y$ P% c* {
UARTGets(ch,2);
- H/ A! x$ q6 J+ Y$ M& Y% }
UARTPuts("\n", -2);
1 ?! }5 T) s7 l# I! i, K
R7 h% q! h$ H$ |
if(ch[0] == 'y')
6 C( y0 _7 m; W# n7 e2 y* Z$ |# w
{
0 w( v8 W1 m. e1 H) ~
/*打印全部读到的数据*/
6 E- P- h/ o8 A2 k
for(i=0; i<upp_frame_size; )
; Q, F8 b; o! S, `
{
3 Y) _- C# o# V6 `" g: v/ t
for(j=0; j<5; j++)
& l$ u0 b) @0 A0 `6 S
{
2 Q' E6 V2 Z* G5 z$ e9 s
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
! z9 D; s4 U8 T$ K* K
i++;
& y/ @+ C" r5 Q3 E
//if(i >= 4096)
8 ]2 M) R3 U1 Y1 H$ s2 F# h
// break;
3 ]; d' a4 J& ~
& \! b; {1 q: o4 E
}
8 L( Z& A6 k1 {1 A% L
UARTPuts("\n",-2);
0 `4 t7 c" p) q* I" Y
}
9 b& Y' }' m* X; S7 K( K6 S: O* T
}
# h& Z0 X9 A9 s5 L. k4 M8 V. l
0 @3 q( U5 N5 [
}
( @9 i/ C* c" r
3 m" X, z/ Z5 d3 b7 @# |
6 e3 l/ r6 x* O6 A I
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
$ a% \& j) K) ^& v# l- q
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
8 b Z- e& X7 h0 x5 _
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4