嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
! U9 `5 s2 z5 Z* F. N9 ~
Void UPP_TASK(Void)
8 m# h' ?7 a! H5 u1 L% v2 A" K# E
{
$ s Z6 A: ]/ `9 K& L
8 e) r u* E7 O% P$ B0 q4 Y
int i,j,k,target_int_count=2;
' M+ g$ {8 _: w% |- M3 C
char ch[2];
( a; ^: V- @& P' ^5 b: r
) Z! I, z" u5 A! o. i# }3 [$ r3 B
+ c$ t. h+ \3 N; S( `3 l, l4 @
7 o" h: X8 `7 B' @
upp_interrupt_count = 0;
& n0 g. o5 Q+ W$ g: G: D1 Q- g
upp_error_count = 0;
+ u. i' w4 Q _
; y$ v4 c) g# y3 B; Y* B
UARTPuts("\tResetting uPP buffers...\r\n",-2);
" r: [% B! W$ T5 R) ^" w- \0 X. J
// Initialize data buffers
/ K; E5 I6 a& Q/ [7 z5 s
for (i = 0; i < upp_frame_size; i++)
7 [, q# W0 @/ |, k
{
5 q; s# V- m- ?/ i# E
upp_buffer_b
=i;
% R% m& d9 i8 u" P# {: H
upp_buffer_a
= 0xDEAD;
- j7 f A! \- f! a, Y
}
% X) D5 O* d. a2 o- B5 R8 e0 {
4 K! `. L7 Z! L* B& |7 g$ ~5 [
//for(i=0;i<1024;i++)
8 v3 y u v/ h* `! v
// temp
=0;
3 t/ j) ~; T- ], y& p. Q
9 q% N) {9 J! ?3 |& G) I; D
//UPPReset();
$ L, a s( E! X8 y5 K% Y
/*启动UPP DMA传输*/
- R; t) H c9 y9 y, D# g7 _3 v" C( Q
UARTPuts("upp_prog_dma_i\n",-2);
6 m$ g9 Z3 a3 G/ z
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% i$ p* ]& S) c |; _% Z7 {( ?( `
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 ?3 n# i& i/ T/ M4 C
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
_% K& _/ e4 |* R% M
9 [9 R+ Z: B5 u9 S8 ?4 I
UARTPuts("upp_prog_dma_i\n",-2);
& t$ I- O' k* [ P3 i% @
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
; ~, J: K! d4 R7 c
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 t; p& y! H, o- h
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
7 a3 s' p# f) r6 |" X" g
& G3 K B3 J: M- [5 _) i8 A" d
/*等待UPP传输完毕*/
7 n, w+ T, L2 @6 p) f7 D: e
//i=0;
9 ?, [/ W- ]4 d# Q3 I2 j
//j=0;
. N/ @1 p9 L% c! v2 ]4 g. J, S
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* }# Y6 B% g1 `
{
/ S( w: H1 i$ ]2 i, S j/ [
/* 测试UPP传输的同时操作普通DDR数据
. L9 s/ \2 J, s+ v1 h& e! O. E
temp
=i;
6 V! z5 W v y4 V0 x2 S
i++;
, P( |( N( M( o5 L
if(i==1024)
, U6 E c6 u% x: f1 I2 z" [
{
, A; X! q7 B a( a- A5 }- A; I
i=0;
2 v( V6 X7 O! L2 y
j++;
1 C A0 R! F/ S S1 M3 M/ h/ q4 X
}
/ |, i: o* h' P% V/ s/ \4 j
*/
5 ^/ r) T2 H: a+ a4 T# d
) C& X/ Y& Z4 f3 s& Y6 u% p' F. g$ v
asm(" nop");
3 E* Y& O) r4 r+ @
% L6 |& _& V( R0 A1 b7 x/ ?9 Y
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
+ ?" g4 A. d2 b. z" r
}
( u v) m3 G$ ]% k( m- J
+ j/ n- Z o& H4 O9 \7 {5 u5 W0 R
/*检查UPP传输的数据是否正确 (loopback modes only)*/
2 M/ H$ L; _+ i
//UARTprintf( "i=%d\n",i);
9 ]( d" A! S- y0 N9 A* D$ |9 n
//UARTprintf( "j=%d\n",j);
- J; M' a' U h2 o" P* [2 s
UARTPuts("Data mismatch in buffers.\n",-2);
1 G0 C$ [, {) [; k, Y: \ U' ^
if (upp_interrupt_count == 2 && upp_error_count == 0)
0 B3 k) [+ T& }' d& ^' s3 ~6 m0 k
{
; @; a3 K8 R8 N2 X) H7 n
for (i = 0; i<upp_frame_size; i++)
& @0 B+ ]; L% M
{
2 M. J' z# m8 T+ N) d
if (upp_buffer_a
!= upp_buffer_b
)
$ X1 Y6 L' j* ^) s( l
{
8 _6 Y3 j% W) F
upp_error_count++;
+ @0 P, G& r9 s
}
k; k7 r) g7 H
}
9 f3 a5 z5 Q0 i) Q
}
( C2 |4 T( D7 \
" X# [) d- t( `& |/ C2 l9 `! V
/* 报告通信结果*/
2 `- u: {1 q0 f! z2 x: }
if(upp_error_count != 0)
! M* ?" W5 G! S0 I* c
UARTprintf( "upp_error_count=%d\n",upp_error_count);
* U# S) \6 G# k2 }3 U! t
else
2 N* C- p- u8 H. }
UARTPuts("uPP transfers complete!\n",-2);
y: c/ t* C% C) L+ P/ p: Q
- z, _6 Z8 f# X! n: y$ |+ r
UARTPuts("Do you want to print all the data?(y/n) ",-2);
8 {, U U8 `7 | d+ a6 p0 d
UARTGets(ch,2);
! Q7 w) c6 G/ a) E$ k5 I
UARTPuts("\n", -2);
! b2 o; d# J* S- i" a, b$ |
# w, h, T% i! s, U' d
if(ch[0] == 'y')
4 B0 ?, e* y6 g% D
{
9 e% @6 M( v ~' D
/*打印全部读到的数据*/
4 M" D( @& h/ H/ g7 _8 B
for(i=0; i<upp_frame_size; )
+ _, T" ?. U7 V( X) O+ l
{
2 i4 W4 C9 i. @7 g& ]/ G
for(j=0; j<5; j++)
$ i& f: y" @1 q0 O% z0 h) f- R4 c
{
9 M( q3 l! c) Z; l. r& U3 @1 y+ x
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
/ ~+ B" \2 y/ S% c r7 Q+ ~
i++;
0 O+ ` V( b# o D& t
//if(i >= 4096)
. o" m' ^4 F6 p
// break;
, g1 J7 r, d6 ^3 j3 A) Q( u6 s
M; G1 x4 R. Y: \3 ~; v; C
}
4 r. i6 @$ W6 n$ p7 U- v" N
UARTPuts("\n",-2);
7 @" l( H1 n: _) {7 M7 F5 T6 ~
}
- J' q% ~1 f! D5 |8 O' U
}
+ {" L ?0 U9 i5 {( |. l
& n6 A3 s. [5 G0 B: m
}
8 ?* r6 b8 T1 _! f; C; _ l
! w7 r8 ]2 ]; o/ T
: t1 \( B6 P# H/ {( {9 K
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
! w( z# x/ D3 m" D
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
3 j9 v" e& y% S: |- I3 a( j
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4