嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ F. _5 [3 P8 m8 B# }- B9 @) L
Void UPP_TASK(Void)
6 x5 j( y0 k1 d+ S; k* d! ]
{
4 Y8 t$ I! r2 m2 h+ S# B
) N3 H; a, @" Q% T) u9 E$ s
int i,j,k,target_int_count=2;
0 o! a& {& q8 D% T( o/ V
char ch[2];
' }* p; G( i4 n4 v
% J) n6 v: P0 a, i! B: s! U: g
+ ~2 f! k0 c7 T/ D" H1 v
0 `* A/ ? |9 i: c! E
upp_interrupt_count = 0;
4 ~) @% R1 q% g9 I8 y- Y2 z2 {
upp_error_count = 0;
' ?+ O' l9 \3 z
5 g3 }: b& n( s( o- y# W
UARTPuts("\tResetting uPP buffers...\r\n",-2);
; [5 k- I8 Y, x6 g
// Initialize data buffers
5 H0 s2 ~* n% Q4 A r5 f" ~* K
for (i = 0; i < upp_frame_size; i++)
5 ^+ p0 s' w# R5 N
{
3 d3 {. T0 ]( J
upp_buffer_b
=i;
6 u7 N* T" `( s
upp_buffer_a
= 0xDEAD;
0 y8 H0 Y9 F8 [; Y/ ?0 N2 T
}
9 `5 Q- z! f, P" P Q* _
# a' H6 q5 L |. c; n. `
//for(i=0;i<1024;i++)
9 X& s: K5 U$ o7 W
// temp
=0;
. ^* H9 z; U4 K" p& Y, G
t% s' [8 G! q* B
//UPPReset();
* J9 e u; F9 p! p; |$ L
/*启动UPP DMA传输*/
( D& T" G$ S% e7 }. \# n! v* ?
UARTPuts("upp_prog_dma_i\n",-2);
* B9 l9 |( S- D
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
/ E2 k' ?3 i0 x" ?4 u! H- N2 t
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 V/ T" y- v b0 u- k
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
* U( E1 f$ Q3 S6 ^- ?
7 X K) i( Y+ |$ J- d
UARTPuts("upp_prog_dma_i\n",-2);
' f& X& Z& d+ X( K8 m9 a
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
" ^- x8 p! P$ G7 ]1 W
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
. x( _" l8 u6 Q# a
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
9 g$ F% \; e/ K4 H
' N' [% y0 g; Y. E. K6 b
/*等待UPP传输完毕*/
5 g( j0 e7 M5 d$ I. d. W
//i=0;
1 W3 F* \ D R- q+ A
//j=0;
7 [4 R4 S; ?$ E2 ]8 X; R+ u5 h/ ]
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
, h: ]3 y. q+ q$ w% W
{
2 E$ ?6 Z9 u) @5 b
/* 测试UPP传输的同时操作普通DDR数据
. |! L5 v: J- \5 I" Y; }
temp
=i;
) g1 l2 c# G- t' I: x! j
i++;
% \, `5 T/ Z! C& |( K
if(i==1024)
. |: C* f8 D5 j
{
0 l; Z- e( u% K1 H; h; e; d0 D
i=0;
9 Q- Z: `% q) e' x' K
j++;
% b* S" P3 [" r& c" e
}
, z5 @" s$ D% S
*/
! e( G+ D& J2 n( b
( |, j [7 _' z$ Z$ B: @* R7 U0 i M
asm(" nop");
' {. R1 k* M) }8 L& b
/ `9 S. f$ g& ]+ ?7 Z8 y _8 z" @* o4 D
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
8 w4 S) d3 _& q. X8 k! q1 r9 W
}
8 h% Q* }; N. w8 y; V; }: t
5 d: W2 m" e4 i! p2 c! L. n- j
/*检查UPP传输的数据是否正确 (loopback modes only)*/
' h& B. e* j, r3 r
//UARTprintf( "i=%d\n",i);
2 K3 H' I8 U. M* g
//UARTprintf( "j=%d\n",j);
1 S# R& \" J4 {0 g5 b
UARTPuts("Data mismatch in buffers.\n",-2);
5 ^( _- r/ x% U6 v- h+ N
if (upp_interrupt_count == 2 && upp_error_count == 0)
2 d7 y0 m* P% D+ V' ?
{
% D% J$ z+ e- a$ @9 c. b
for (i = 0; i<upp_frame_size; i++)
0 K2 b' K g7 I" h
{
A! ]0 b9 G$ R' |% o' D/ D
if (upp_buffer_a
!= upp_buffer_b
)
) s7 v- t, \( t4 N# h
{
9 j" n; e3 V, I
upp_error_count++;
! m* V* b: J) n, W) b
}
! @' w% ^. p2 M, M% J' g
}
8 ]+ H* N3 i( H9 ~
}
& h+ w4 H8 [# Z' H
0 f$ A$ d' E9 w
/* 报告通信结果*/
0 N/ w9 n0 [7 M
if(upp_error_count != 0)
/ A8 q7 z) b$ F
UARTprintf( "upp_error_count=%d\n",upp_error_count);
. [+ ~1 n6 e2 u4 }" v
else
& |9 Q+ L4 F. a/ z
UARTPuts("uPP transfers complete!\n",-2);
$ c) x+ F4 H, u$ u. V& A
9 F4 t. [! |6 r, j: a- O
UARTPuts("Do you want to print all the data?(y/n) ",-2);
6 [ H. _' a7 E: r Z5 |: N
UARTGets(ch,2);
# F+ q2 ?3 A& J, v+ E4 t2 F
UARTPuts("\n", -2);
9 C \3 s$ |8 ?+ g' O
5 ]3 R* ^# H# q4 Y4 Z
if(ch[0] == 'y')
* n9 q" Z* k! u$ M5 X1 P( F* D+ R
{
+ L5 w% b% G- R; r! h
/*打印全部读到的数据*/
# @, J! C. ^" g
for(i=0; i<upp_frame_size; )
" s5 a) C8 G8 O6 y+ U
{
1 q5 A+ w$ _% T* \0 h
for(j=0; j<5; j++)
4 I/ R2 |5 c$ W, F, {
{
4 f# t0 V/ ?; N6 K0 S0 ^% [
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
0 k: O' ~) O4 N4 X/ c) c3 t
i++;
) m( g* a! a# {8 {' ]: B
//if(i >= 4096)
7 D( p# t9 A9 Q3 N$ Y
// break;
0 q. Z7 s/ T( t! s$ Y% ^, s/ k
4 { ]7 B' E6 N! v# E! s( {6 b5 m- i
}
7 J1 M9 c5 s) ?& c
UARTPuts("\n",-2);
8 d5 m6 H# ] p; i+ I# I. Q* x
}
: Y1 |9 g& b1 I% t2 a
}
0 Y2 Y! j0 u5 l( Z4 ^
7 f3 l7 O8 J5 U, {. u3 @+ u
}
0 {& N* V0 w1 H a& v
% o0 }5 V9 `4 n) w5 [
8 G7 v! D4 c& K3 s2 T9 Y0 [
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
6 K% v0 B7 X2 h0 j0 w: M
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
: {0 t( v' P6 g5 y
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4