嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
`" \' ?1 P6 _1 D2 d l$ h! m' M
Void UPP_TASK(Void)
9 N: S) W+ D- R) Y* { S2 s1 J: _& o
{
4 z$ Y1 @- E! P. X5 e! d
0 t" V" w r' \( T5 o" v) o) f
int i,j,k,target_int_count=2;
# r" @% F7 B. C
char ch[2];
' u; B/ {% q& P- r! ~
& j, h9 Z7 w* U8 A- n0 D( s7 `$ S
6 a8 f6 u, D8 j1 X) h0 _
/ E! l1 u) r' ?& V# c X. K# J
upp_interrupt_count = 0;
5 `: x: Z! A, ?; x1 K1 Q
upp_error_count = 0;
0 f/ o* ?' i$ U
& S0 [. J; ~5 x# Z) z1 Y! }
UARTPuts("\tResetting uPP buffers...\r\n",-2);
# j* T" ]( V% j! R$ F4 L
// Initialize data buffers
# p \6 O4 n& Z' Z
for (i = 0; i < upp_frame_size; i++)
@. U8 `+ _; J! @( g
{
& e. Y0 Y1 L0 ?; v3 r0 K/ R
upp_buffer_b
=i;
) i5 u" i* y) L1 Z, N! b
upp_buffer_a
= 0xDEAD;
' r: Y8 s1 _6 l
}
) `' s# W3 V: P! C* g2 {" w
% p( K* j0 w& W
//for(i=0;i<1024;i++)
) L4 `% _7 A8 v) k) W& f8 b- S2 ]
// temp
=0;
1 a/ R |2 }" B& c) o
) P d( R+ t/ D5 H
//UPPReset();
! J$ I/ x6 M1 E( S& C5 u9 C0 h' Y
/*启动UPP DMA传输*/
4 d% q8 G- }& r: T, `4 b
UARTPuts("upp_prog_dma_i\n",-2);
9 x" X. O! f3 j6 [
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
- G8 h* M8 @+ {2 l$ ]" @: d
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
h* \+ i: m, f/ `/ _: ?
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
! T: G, G. L' D) f# O
1 E4 j. T$ A5 [/ r) g
UARTPuts("upp_prog_dma_i\n",-2);
; b% E) t, E5 W6 Q& f# n
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
% b1 I6 ]0 c. P. U2 }9 T
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" N& E" k$ H: C4 n5 i6 s
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
, H& h8 a1 I8 V9 j) y! V A
6 k V7 ]8 ]9 u: N5 p6 \
/*等待UPP传输完毕*/
. q B$ v+ ]8 t3 U
//i=0;
* \. k% i1 K$ C5 s/ R& y
//j=0;
! N( G* i( Y: s# S2 c ^/ F, @
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
$ K, Q0 P0 z5 d5 G5 C
{
1 [8 i6 q* R( E- P1 L9 K) B* H
/* 测试UPP传输的同时操作普通DDR数据
- J/ @! \9 E- V+ T
temp
=i;
- L# `" K& d8 l. x
i++;
( o- o! |% F% `) x) G0 b
if(i==1024)
1 f: h# ^# |$ t' H6 [1 o
{
( {! f6 b2 N" S/ }& u1 U
i=0;
2 s- Y ^ ?" W& }, j
j++;
4 q* E1 e9 {& }
}
1 R, y+ _2 }% e8 }
*/
- b5 y: R: E+ c v e4 ]6 M v
7 z& i* e, g! R
asm(" nop");
/ L# G, a# V6 q7 D6 k# r' ]2 `
$ q+ A( g1 w' r5 ^9 f* ]. Z
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
- r$ e% a5 @* g7 @/ S+ }0 l
}
4 X) o3 ^! e* P
, Y3 C2 Q: \9 t
/*检查UPP传输的数据是否正确 (loopback modes only)*/
; f* R ~; S' q, M& V
//UARTprintf( "i=%d\n",i);
9 b2 r* O- K$ t/ m" t9 H
//UARTprintf( "j=%d\n",j);
/ B- v$ C! b2 h m$ m
UARTPuts("Data mismatch in buffers.\n",-2);
" d/ d: U0 Y& Y8 V1 G
if (upp_interrupt_count == 2 && upp_error_count == 0)
i7 A% v" m% b/ A; s
{
# s" z8 P9 I' X9 I% N7 A; j7 \& r- I
for (i = 0; i<upp_frame_size; i++)
6 V/ r$ E7 M) ^- v
{
# B* c; P( g9 h* N3 V( v
if (upp_buffer_a
!= upp_buffer_b
)
( A% z* S- x! z2 Z
{
$ a1 Q% w+ j; ]0 G F
upp_error_count++;
8 d1 o# S3 [9 m5 W
}
5 k8 P: W* l0 W( ?! C% e; |0 c1 v
}
& o, g* n, {1 B# t, P' Z
}
7 r& M' L) f m/ B9 r2 ^. m
. E: f# z9 V1 u% T, t
/* 报告通信结果*/
" ?2 J" i. s' i8 ^) n8 w' k! g* W! p5 k+ {
if(upp_error_count != 0)
' s2 C) a8 ^5 _! p
UARTprintf( "upp_error_count=%d\n",upp_error_count);
0 a7 S7 h. |9 x4 W$ {8 v; j
else
& V2 d& q( u& V
UARTPuts("uPP transfers complete!\n",-2);
2 R- Q; g! ]$ I- X1 s( W& ?% K! C
% K' f! n8 B4 P* v9 p5 e
UARTPuts("Do you want to print all the data?(y/n) ",-2);
1 P9 _8 S$ E- H" |5 e" W$ a
UARTGets(ch,2);
1 [" u4 }' _" G2 q; U1 H% T& x
UARTPuts("\n", -2);
4 o, P1 X: P" A% K( G. F$ A. P, J
2 p2 z$ F% O2 H5 J
if(ch[0] == 'y')
; h. E1 k' m3 j$ }1 r/ ^8 W! t
{
& \" X0 ^! D- T
/*打印全部读到的数据*/
. `3 U! w1 ]$ Y6 a2 ?
for(i=0; i<upp_frame_size; )
' T" C+ K9 g- i C
{
4 c7 b B8 L' Z# H
for(j=0; j<5; j++)
7 u. i5 q! l8 J# V7 z m2 O' h
{
% s# S; D. M. k- ~
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
/ z/ l( X& K, P! I; t( G
i++;
. d% V1 v, y4 o4 t
//if(i >= 4096)
: ~% W {- g3 |6 R, v7 t8 b
// break;
8 }# x6 }- q4 T/ M+ B
5 |: \* h- O8 l K& U: |! _3 l( H
}
- ~: N( K: C& P; f8 m1 }( L3 i3 P
UARTPuts("\n",-2);
3 }4 C3 Q0 v6 l
}
! `6 U4 [; T: B3 L% K
}
9 O' B" m& \9 [; m# d. g) W4 X
' U0 G+ W {. q
}
: N: z# H& K# q+ ~# J9 X
& `( d$ a7 ?+ h. U4 z6 S, d" X# k9 V
' ^3 d6 H3 i9 r" T) B2 ]( |. W
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
# M, H- f6 u& \0 v
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
) H7 E; Q' \/ c+ K3 H5 u
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4