嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
. F: F- g @ |
Void UPP_TASK(Void)
) d9 m. t& j# `" ^
{
. C& P& |, {) ?
8 V3 ]! l9 T# ^4 ?) h( e! z
int i,j,k,target_int_count=2;
- O/ k1 E, w0 N' {- P( s5 z
char ch[2];
2 x/ a9 L5 O! p* G) B! t z' @
& h! C# e7 ~ U L3 D$ c
( L. e5 j* V# X- U1 e$ i \7 t4 n5 l u6 w5 g
! R; r6 O3 a* p$ ~+ p c' ~5 Y2 W
upp_interrupt_count = 0;
/ |& X' i; ]' _4 E+ @5 X6 Z
upp_error_count = 0;
$ ^5 Q5 v! l9 n. x
$ c6 F/ m* m' ]" k- H$ `# B- [
UARTPuts("\tResetting uPP buffers...\r\n",-2);
, z- F2 m4 y/ J4 \/ a* ]: n/ q
// Initialize data buffers
6 |- {+ b& s* Q0 Q {
for (i = 0; i < upp_frame_size; i++)
- Y w* p: `7 F; M
{
2 f, n7 M% n* ?- M, [# L1 i
upp_buffer_b
=i;
2 M F8 [* t, D4 @+ |* X) b# I
upp_buffer_a
= 0xDEAD;
* k5 ^5 C. C: i
}
3 B: d& z. X: O, [
* F3 d4 \6 A+ Z. ?; f
//for(i=0;i<1024;i++)
+ R& n- J9 _! g$ @# O
// temp
=0;
" q! a2 }- B6 h+ P: N
/ `! {! Y7 O7 o( B5 B
//UPPReset();
6 g6 M! S- J9 x1 i* e! `& ]
/*启动UPP DMA传输*/
8 g4 b1 p$ ~( ^
UARTPuts("upp_prog_dma_i\n",-2);
! D' X2 h" J. ]2 A( @
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
& i% L# a' l: T) v
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: D) @2 V" Z" A: z8 n4 ~$ m
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
7 S$ p% D/ i; }0 h
" S0 x4 f7 [, H; f2 F
UARTPuts("upp_prog_dma_i\n",-2);
/ R% p( C5 l* P/ W/ f* e5 e
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
; I3 n& g0 Y+ ~8 E+ |! z
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! J! ]2 z) J5 E* O A
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
( u; y, d+ `4 D$ R+ ^$ e0 k
$ @7 U0 a1 A5 m) a
/*等待UPP传输完毕*/
7 L- \8 ?1 m% D Y
//i=0;
3 t$ b- r0 Y3 \0 s* r9 X
//j=0;
% B0 e/ L: x! w! i8 o* [
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
+ C& [0 F9 Y5 I, c8 x& L+ i
{
+ u/ O! p) g3 ?+ J9 t% l8 A7 g1 }2 n
/* 测试UPP传输的同时操作普通DDR数据
9 a4 m- T: R9 O1 _( o# W# ~9 \) K
temp
=i;
/ Z: p( P, J" V* D( _% w
i++;
5 `9 I2 K) c: t. f) O
if(i==1024)
+ G' c$ N7 t8 q2 t: ^1 U6 k l
{
k: g. g; |. O2 c- w
i=0;
# ~2 L/ ]! P5 A) n+ q3 Y2 a
j++;
( b& l3 g2 a0 |& J- p8 T, B
}
% n4 y/ |4 h0 \6 i0 j a$ e- O, x
*/
, V3 m/ `- J+ R$ B$ o8 L
3 O2 O' l9 z* u4 K( {1 ?* J; S! _
asm(" nop");
! O( h+ b9 Q1 Z, B) g
4 W" @3 P1 N. z# K! O, x
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
1 ^8 i3 K; u0 H& B# \# f
}
- a# k5 h1 t. W
% _. L. B9 [1 n* E2 J9 _
/*检查UPP传输的数据是否正确 (loopback modes only)*/
& l# W8 s) {& K' D
//UARTprintf( "i=%d\n",i);
) q! ?! K) P3 E$ e
//UARTprintf( "j=%d\n",j);
; h6 A4 h. \/ z: K- ]& p
UARTPuts("Data mismatch in buffers.\n",-2);
2 Y+ @) Q6 F# H( [9 S7 E# e
if (upp_interrupt_count == 2 && upp_error_count == 0)
8 P4 Y0 f t! L- A t m
{
# ~. ]* A9 \8 f* b/ w" l4 a
for (i = 0; i<upp_frame_size; i++)
5 ~8 Q1 @2 p1 i/ u4 p, ^
{
8 Z8 H/ e9 a: L2 L
if (upp_buffer_a
!= upp_buffer_b
)
8 a: z) v4 L5 Y
{
$ I3 |9 j' f4 Z& v% I `7 x
upp_error_count++;
3 j# K P8 n# L6 l
}
( s( {* V4 K( {! B. m
}
/ R+ H) j; G# X/ l/ R
}
% Z. u7 y! c1 `' W; V7 r$ k& N. Y
6 k5 N) ]+ [! f
/* 报告通信结果*/
; n- E I: X. r |! h8 ?
if(upp_error_count != 0)
# `7 f" c: `- C. K3 F
UARTprintf( "upp_error_count=%d\n",upp_error_count);
7 e, Q; e9 G. X
else
; _4 r7 p+ }! [' F; M
UARTPuts("uPP transfers complete!\n",-2);
! y! U: T) ^* t+ Z) j/ Z* Y! ?$ h* J
! [( v: h/ M9 S$ t. x4 D
UARTPuts("Do you want to print all the data?(y/n) ",-2);
8 p$ u* w# J2 _, Q& M9 k, q
UARTGets(ch,2);
9 O/ G0 K/ S1 ~; o) F O
UARTPuts("\n", -2);
/ O3 T% M( `$ u2 u; D
4 ~& d' V3 }4 H+ x$ C- Q! z
if(ch[0] == 'y')
: y* W3 t' n- X% {+ M
{
: h( i; U; J0 i
/*打印全部读到的数据*/
7 Y- I/ Z; r# j% R
for(i=0; i<upp_frame_size; )
- q. C. o+ d- ?7 m
{
3 ~& w, h4 a0 f4 N# ?
for(j=0; j<5; j++)
h. T4 Q3 s, N' l$ Z+ ^
{
B2 l- J' I4 y. X/ D3 B
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
6 X$ @( H& \+ Z |% q
i++;
/ A! k: {( n. K2 g# l: Z7 M
//if(i >= 4096)
. e; q% H n2 l7 P% q
// break;
; i. L/ f/ Z, y
" N6 ?0 \- Q* p2 `& x
}
8 |( _$ o q. _+ z, ^( W( l# Y; q
UARTPuts("\n",-2);
3 t! M2 A9 z# i1 M$ f6 G: ]5 i
}
" A# U' o. j: y
}
' H! S2 b+ E0 V& q# a9 Q' T
3 A% l# D, D/ j
}
& E, m7 w- d# p0 u; J% p J
# w9 n N/ ]% y
5 t8 B2 a! m0 F; F- e# \
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
) ]2 z# O/ \1 [7 ^+ w
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
8 h: V3 j3 {3 l5 l6 k: @
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4