嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
' S0 P1 Z4 o% `3 D
Void UPP_TASK(Void)
5 p! J z9 J2 p" s( ~
{
/ L8 F6 O& `- G: P# v6 I# Y
4 l/ M2 [2 N: i0 b
int i,j,k,target_int_count=2;
3 E. v. D! M6 X2 Y; H
char ch[2];
: }! J; q) y6 m' O7 I
( M$ ~9 i" Q+ D
) C9 e" W( G, u' I
5 J" { P: i; V) t
upp_interrupt_count = 0;
# P% g- J. ^/ R% l
upp_error_count = 0;
+ _0 B- A% N" o% z
1 \& O# [6 V& ~: w" B# u8 x# x! G% u
UARTPuts("\tResetting uPP buffers...\r\n",-2);
# t" G; P! S9 q/ @* t9 W
// Initialize data buffers
/ K. Z$ C* K4 I# A$ M5 F
for (i = 0; i < upp_frame_size; i++)
' D7 R w1 ` H5 V2 @+ }
{
% k; X+ \; s" c- D3 J+ N5 P& s
upp_buffer_b
=i;
) m, h8 F6 h! m; }& R
upp_buffer_a
= 0xDEAD;
* F" P" a$ _3 I2 l" ~
}
3 c1 @' W, F5 f* U1 O7 y
1 c( B" `6 h+ m: {2 v
//for(i=0;i<1024;i++)
5 i$ x* v, d/ A, k1 S
// temp
=0;
8 A9 u& X6 }( `- ^5 q' [ o- X
5 C7 s9 @; x m9 u
//UPPReset();
% F/ r0 b7 e- G) F+ W% _
/*启动UPP DMA传输*/
]: _5 B7 R8 i
UARTPuts("upp_prog_dma_i\n",-2);
' k# t" j* e% E/ d
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
* M' U) I3 d5 s# ^. l" }
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' S# n2 ?6 u' S0 W+ N6 @- y
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
: \" K8 L: N: U3 U: ]( c
. I6 d( y, N3 ?6 `
UARTPuts("upp_prog_dma_i\n",-2);
4 o% Z% c. R8 D$ G! \1 m% f2 M: u5 _
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
2 M* E3 A2 Z% }2 Z1 z7 q1 S0 a
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" J) V) w5 X( ^ T
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
) D! l- O4 L+ F9 J7 T0 y: m6 b; |( s
7 g5 E( q/ K- h. @6 X- g" v& |
/*等待UPP传输完毕*/
( w$ ~+ m* Z+ o$ N
//i=0;
5 D4 [/ u2 u: F
//j=0;
7 |7 S4 X- e/ ]0 e6 O7 x2 r
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
2 t. W4 t) E" v8 M/ N$ p1 C" F, z! P$ C
{
' h/ S: T/ ]$ c; I& a
/* 测试UPP传输的同时操作普通DDR数据
3 t6 z: N' a- i/ |1 Y) j7 [, k
temp
=i;
. }+ C# B( A% I" Y3 w& {( ~. V
i++;
$ M/ O7 z; \/ ^0 {; a0 q6 \( d3 k9 f
if(i==1024)
3 w7 p4 d! ~% I v* Q
{
+ T; z" x: q6 u* x! |, r/ Z9 p
i=0;
( q, Q- M/ L; x7 y4 ~/ ^. f
j++;
7 F1 J& E, \3 ^, ?. N$ E7 s! ^
}
' Z6 Q2 E# j* k
*/
8 N$ Y4 O- Q2 ?) I6 a$ K8 j
$ }8 E6 R+ H$ [" G3 A9 f
asm(" nop");
6 Q, m0 `- T9 T+ Q6 `" Y( A
) h/ X$ r$ C$ w& h
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
- e K; X' F% G! x; ~6 K
}
4 Y" U6 @0 ?+ u; e( q5 K0 U5 g! f
/ l" a; r! Z" i
/*检查UPP传输的数据是否正确 (loopback modes only)*/
7 Q' a! G4 A8 T( ]; ]0 G
//UARTprintf( "i=%d\n",i);
' r4 p7 D4 j+ P; X8 P
//UARTprintf( "j=%d\n",j);
' r1 `- f/ m! d1 ^% }
UARTPuts("Data mismatch in buffers.\n",-2);
% V: e8 y7 [1 {- c8 H! l9 F( k
if (upp_interrupt_count == 2 && upp_error_count == 0)
7 N( ?% r' C3 l+ ~& d! E
{
3 q- G" m+ z) o( X2 u, n9 e
for (i = 0; i<upp_frame_size; i++)
" O1 G2 S2 K0 ^
{
. O- p! O3 [6 H0 e- L" \" F8 `
if (upp_buffer_a
!= upp_buffer_b
)
) k: j; L1 W% k7 L* |
{
& }. { H( G1 v
upp_error_count++;
( J2 V" m( ]" b. f
}
, X' I, \0 V; g# S9 c0 p
}
& |6 _# `$ e8 y( g6 l" N' v
}
7 z, e2 r! V) z( k. E. v1 \
6 o7 R7 t* W% n. r# n8 T
/* 报告通信结果*/
, F* h$ `3 w5 R" a$ K, J6 ~
if(upp_error_count != 0)
1 w$ `+ I" q+ G p) Y q
UARTprintf( "upp_error_count=%d\n",upp_error_count);
U/ I5 T. \4 v* K; K! d) }. L
else
, y. g2 U2 I" w3 r
UARTPuts("uPP transfers complete!\n",-2);
" o9 v4 I8 Q, U3 m% q3 t4 C
. j0 R5 Z5 C* M! I
UARTPuts("Do you want to print all the data?(y/n) ",-2);
|6 y; b) z/ L
UARTGets(ch,2);
/ p4 l7 |$ {# R
UARTPuts("\n", -2);
' b& C9 J' D# A9 G8 p
. ^9 F& a# a8 V, v7 m# x
if(ch[0] == 'y')
1 `% p6 C0 q, ?+ F
{
- ?1 e) a0 S" ~3 k# X7 |4 u
/*打印全部读到的数据*/
) g% w) \& R' j' U
for(i=0; i<upp_frame_size; )
4 Y, j$ f8 C6 L: ~5 U8 Y1 b. w( U
{
" Q$ ^( E9 q: O+ x! {- _* L" e
for(j=0; j<5; j++)
+ m: s; }# p( t$ e% G. r0 h% d$ x
{
% v- A1 y! P9 Z8 t' V# V
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
" P) D- l/ f3 _, B+ G, t6 }7 `
i++;
/ U0 X/ g/ B' A' Q4 ]) _, I
//if(i >= 4096)
2 i' s" s- R, s1 K
// break;
* z% a% @ G% o
. H! k8 ]. D5 |6 b5 C
}
; v$ D# c7 ^$ t* i
UARTPuts("\n",-2);
1 E& K$ l' E6 H! R) j! T
}
& s$ Y O) ~- S4 B" V! h- t
}
- B3 M% @: V" \6 S( Y5 W8 z
6 ^ [' i: A- c8 b" r
}
( U* W; g( i$ d1 n+ ?- i4 t
" }; g/ K ?) |$ _$ L& `
6 S7 t& k$ J0 |' T: J# E) Q
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
# [7 L) A8 D1 Q. K
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
# ] }) Z( w3 n0 V* [8 ^" G b; Y
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4