嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- m. l; v$ {% S6 ]) _; X
Void UPP_TASK(Void)
! c* R3 F: Q( [* P0 b
{
& |+ P9 U/ D& S, N4 N; v
, B4 C' \! f3 G7 W A
int i,j,k,target_int_count=2;
2 O- o9 B* \ M" C
char ch[2];
) [& S$ k9 U7 \; x$ ~) P5 u. W
7 M- x1 R% O9 h# h+ t- c- z% k0 \6 f; ^
; O8 V- o# x* @0 O' P8 k
. S/ Q- b: u5 r) W2 ^
upp_interrupt_count = 0;
3 r# ]* S3 s; _; v: ~- x
upp_error_count = 0;
( g( \% @! C4 u& Q) ]+ @9 }( k
$ c( b, F/ O2 W; l2 b$ p6 j9 f1 C' \
UARTPuts("\tResetting uPP buffers...\r\n",-2);
( I9 H2 a6 m6 o7 V' L
// Initialize data buffers
0 H( z& V. ~7 N
for (i = 0; i < upp_frame_size; i++)
) o6 y1 G W" O- Y
{
( e) {6 Z( M2 ]! L" [0 H
upp_buffer_b
=i;
) |: P8 N( V6 O" r! n1 K
upp_buffer_a
= 0xDEAD;
8 V2 T4 X* E& b% g5 \9 h( P2 t
}
( ?& n( d+ P' C
# x; n G3 A: p7 ?
//for(i=0;i<1024;i++)
7 `( Q4 Q1 n) M9 d2 s
// temp
=0;
4 Q# J# b: K+ n) f# I% g3 g% ^2 I9 j
+ q. t# F9 M" f1 r& n( {$ l
//UPPReset();
5 k1 F" g) q. o
/*启动UPP DMA传输*/
+ s1 j! l1 Q6 |3 g6 z
UARTPuts("upp_prog_dma_i\n",-2);
+ X: A6 N! {9 y% m
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
. E. m; j# B- Y& `8 G! {7 D |4 q! J
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ W& [) G: H: C3 r1 i! c
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
/ a, K3 Y. Z7 D7 x3 S
) d2 I- m7 X/ ~! ]& t0 T# R
UARTPuts("upp_prog_dma_i\n",-2);
( X4 y* {" K4 z* W
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
( m. V0 ?% J/ ~ W+ d
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 ?' Q/ U6 l' r0 g6 _* ]
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
) A* s" F1 M2 M6 ~6 T+ D5 X0 I% }# [3 M
8 V; g8 J! @6 n) y! H8 F
/*等待UPP传输完毕*/
3 R- G1 I' m; _& p, E
//i=0;
; W2 [& Q6 A; g; }% d3 T3 w% g, i
//j=0;
; b* ?, F8 }7 U9 z, o4 @, V, p
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
# a2 H0 ]5 t7 L
{
. u. Q; w, m- f) I# k
/* 测试UPP传输的同时操作普通DDR数据
8 t$ ^, t# ^: ~% P G* f( q
temp
=i;
0 g1 x7 U; V' N+ u
i++;
' D! ^$ F& P8 D" T( v: F% Z# j
if(i==1024)
) A* j: L9 X! r' P8 H8 A0 ^
{
% S( T; z; L! Z) @# n4 _4 K
i=0;
$ K4 O& q! n- B: b/ X# K) k
j++;
- b) X" ~; @5 Q, R
}
; z6 O! v9 }3 R+ ~8 m
*/
& L% s: y# {" |1 @# R8 y: \. v) `
* m4 e! \$ D D4 b2 L$ n
asm(" nop");
, }" R* H6 Z+ ~( s
3 E/ ]6 x7 s- }
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
9 j- m4 ~/ m$ b9 t' S8 q d% o5 S, ?
}
/ x6 ?2 d; S' y6 _3 Q8 E
, G8 L0 u, O, K# J2 b
/*检查UPP传输的数据是否正确 (loopback modes only)*/
9 Q9 b8 y& z9 c$ ^; ~+ M8 G0 U r
//UARTprintf( "i=%d\n",i);
, P) g% `# u ]/ w
//UARTprintf( "j=%d\n",j);
* f! o. o4 ~- E. s: ~1 y" ?
UARTPuts("Data mismatch in buffers.\n",-2);
) k4 S0 x' n7 b" N" z! C
if (upp_interrupt_count == 2 && upp_error_count == 0)
( V% W2 C. e7 x9 n. }" M0 v2 p+ C
{
1 I2 t4 [2 d8 N" d+ u) Y4 j
for (i = 0; i<upp_frame_size; i++)
T s& ~6 q; X) @
{
0 p- A4 k2 A( z( U$ {9 o
if (upp_buffer_a
!= upp_buffer_b
)
$ k/ s0 s: \5 D: j& R% S
{
' ]& Q) {* W0 \1 {! |. h
upp_error_count++;
X9 g8 h9 l: Z) c9 s
}
+ W l6 W6 @( a
}
+ M/ T5 x N5 _# c
}
% D& z$ t ~/ @% N8 j8 k" l
8 J9 p! s- n6 y$ E
/* 报告通信结果*/
; I' W j: [4 f/ h# c* I
if(upp_error_count != 0)
: q( S* @) u {& U7 C
UARTprintf( "upp_error_count=%d\n",upp_error_count);
( C4 x: c, y9 O
else
9 K1 s9 c9 M2 b
UARTPuts("uPP transfers complete!\n",-2);
; N/ F9 k2 T' X, i2 p4 Z: k! ?
+ {1 e4 K. k; g: x" w
UARTPuts("Do you want to print all the data?(y/n) ",-2);
8 t3 J' w: d4 C# i( E
UARTGets(ch,2);
8 ^% }) C6 u T' }' i
UARTPuts("\n", -2);
& U. v$ H: j; j( D' }
5 L# B) ^1 Z; ?3 v7 ^
if(ch[0] == 'y')
% W W* B6 G2 r! b4 l
{
3 u/ x, Z3 E0 A
/*打印全部读到的数据*/
, g7 V: o; s9 \2 s. ]
for(i=0; i<upp_frame_size; )
+ T6 ]! k1 i5 s5 `, W
{
/ Y9 {6 ?6 E9 d; r1 g3 ]
for(j=0; j<5; j++)
* I2 j6 l) u* \0 a- C
{
0 P, I/ d% j/ B; h. H
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
& L7 x% B: ]- r
i++;
6 D& u, ]& V( k7 e8 d
//if(i >= 4096)
" [3 y: _. z5 X1 H3 c8 v0 s
// break;
, @# @) t8 M, @9 n
/ t, o# a6 \) Q/ v
}
. f$ j" I! Z1 ?; i$ Y
UARTPuts("\n",-2);
; j& @/ S4 [( I6 j$ _: o
}
4 [! u4 n9 i( Z) U7 J! B" @
}
/ `% h4 a% z L; Y
9 ^0 ?8 g& m! A( J
}
. ^+ L" w9 i+ \9 d: B" c
l8 R+ c( v% Q/ \) K
' \% P2 ] @5 G* M2 j/ H V" Y/ U2 b
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
( f, v% M2 d, P' f
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
- w% X5 C+ D# Q+ t! R
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4