嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
/ u9 K4 i7 w( m2 r0 z
Void UPP_TASK(Void)
( `" x% J& _1 B
{
! [. o4 U( ]1 [0 r* [# J$ @$ n
/ {1 {# t: J) i( s' u; C
int i,j,k,target_int_count=2;
, B; R) t5 |0 _" A. B
char ch[2];
- K) w$ E) {; f
) w6 c# f; l' w" \/ _ j
3 r4 B5 t$ Z# |- }- h
$ T8 }* x" T8 W% M
upp_interrupt_count = 0;
, t- G) P3 k: _/ k
upp_error_count = 0;
: l2 H$ o4 U$ W
- g2 G$ t/ t) t- ]4 p2 [7 x X
UARTPuts("\tResetting uPP buffers...\r\n",-2);
. A9 {& n/ T J- x p$ \6 s I3 x
// Initialize data buffers
: b& a& V3 X5 y/ h
for (i = 0; i < upp_frame_size; i++)
. {- B; B3 t! R+ d% [
{
0 f8 D- T8 X0 h
upp_buffer_b
=i;
+ y3 K# N$ n( i9 w3 ^6 S
upp_buffer_a
= 0xDEAD;
; r6 p$ C1 ]/ L; L/ [5 K
}
3 U J% v; M2 N" K1 n% z) q8 e
+ y6 T" x+ h/ ` f1 N/ ?
//for(i=0;i<1024;i++)
) ]% C& p. {# p/ U! Y# A
// temp
=0;
) G8 t0 V& b/ K! h; v% i
4 D) u: B3 k" k9 K7 m
//UPPReset();
# P. ^4 e2 [& ~. O: N4 z& i
/*启动UPP DMA传输*/
8 p3 r v _5 s3 V2 `
UARTPuts("upp_prog_dma_i\n",-2);
$ k, s- d1 s% x0 Q" L1 r
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
, d* F: k/ X2 E' ~& y
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 w, P4 A% \, m
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
3 {8 }5 D! }! T6 m
. M# Q, V3 G) | U" X3 u/ |
UARTPuts("upp_prog_dma_i\n",-2);
`' B. Q: ^+ q% T2 p& Z
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
& h+ o+ P& R( H8 L: k, P
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# o5 Z; J8 |9 F
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
( L# B6 Y4 {9 l7 x- B* Y" n
! j, R& L" t$ n% I* c
/*等待UPP传输完毕*/
; B2 d( D) v% `$ L9 m4 J
//i=0;
' w- ^8 e3 ^1 ]4 C, s
//j=0;
: V# H7 _9 A, ^2 [- R. }6 p
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
% O" H; h3 b" A/ b6 O
{
+ C- c0 \6 r+ [
/* 测试UPP传输的同时操作普通DDR数据
7 m, X$ c4 y8 b$ t$ S
temp
=i;
; e/ ^0 Y* n$ N
i++;
p2 ?) P# z& }4 c! U
if(i==1024)
9 b# S* x- u2 E3 q7 O0 ?
{
( T# Y4 J; ~0 x3 c, {% c& {& j- u8 t
i=0;
$ T3 X7 h( i2 N3 h& e! L& T
j++;
4 M$ U; `9 r* J% T
}
8 T! q( w1 [2 W5 O5 l% W8 h& I( t
*/
% c. c. }; T8 l
7 a6 w# q4 J7 x
asm(" nop");
" Z2 u5 p( r& e' r3 v
# x$ @: G8 E! V/ M
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
/ ^. z$ F \; m& @
}
( q; u. I1 P& R
) a+ K& a+ W8 k3 S; T
/*检查UPP传输的数据是否正确 (loopback modes only)*/
. t5 w5 }5 C9 n
//UARTprintf( "i=%d\n",i);
/ ?/ x( Z8 ^" {8 b$ I. @. Q- M0 }
//UARTprintf( "j=%d\n",j);
1 z5 M% i' Z+ n; Q/ s e
UARTPuts("Data mismatch in buffers.\n",-2);
* ~8 o. s6 `& e: J
if (upp_interrupt_count == 2 && upp_error_count == 0)
( V+ G* e. w T( i1 X
{
& Y8 g, s% H' w) g1 R' @' z' [
for (i = 0; i<upp_frame_size; i++)
6 p1 k( v Q9 z
{
+ G5 }; e+ S" F- F6 q
if (upp_buffer_a
!= upp_buffer_b
)
; P; ?2 e1 w; L& e, J" ~" g
{
N% L4 u2 j- ]
upp_error_count++;
, z+ L& z4 S2 _
}
+ Y' _2 y" v! K+ E# l' F
}
# Z+ E& |; m. ^) e K% v
}
) G, I6 r( w, \" U
: [" J' O! m; o8 C. V/ Y
/* 报告通信结果*/
' K! |0 W5 s1 Y
if(upp_error_count != 0)
2 K/ a, A3 o( O; J8 S8 z9 a
UARTprintf( "upp_error_count=%d\n",upp_error_count);
2 G' \2 y) L U' r% |1 H
else
+ [7 g2 L. @+ \& N, u- s/ d
UARTPuts("uPP transfers complete!\n",-2);
4 j; R; u. W3 m4 B, M6 O
2 B9 z5 u9 o9 _/ X8 R+ K
UARTPuts("Do you want to print all the data?(y/n) ",-2);
8 t/ P6 r( h6 x2 F8 V7 O& D
UARTGets(ch,2);
$ w3 \) h8 c; m# K$ N
UARTPuts("\n", -2);
. K4 i8 |8 A8 z% ^' R
- i2 S) W! ^9 o+ n* e1 l# u1 H
if(ch[0] == 'y')
( M* f M6 j( A* D& q4 g
{
+ e8 u' q' z! c. _* z3 H
/*打印全部读到的数据*/
) y2 ?' O& R9 y7 z
for(i=0; i<upp_frame_size; )
7 v$ g# I% }5 S, ^3 `
{
+ o, @: b( A/ X" A: E- |3 d+ u8 R4 G
for(j=0; j<5; j++)
4 J8 r+ L8 W s! w( u
{
/ D& V( \9 b$ d' H* {( `
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
1 C3 L+ W' ^" \' i$ n' e
i++;
1 A1 u5 U3 F8 q. q( {
//if(i >= 4096)
+ \- R) t: m+ W4 O. O* X6 f/ \
// break;
/ A% M2 Q" ?# m* ?( C
; Z' Y! ?+ M X& y% z# y5 u
}
j3 e3 J5 ]0 ^+ ]' G- J
UARTPuts("\n",-2);
9 t2 B1 U: `+ I
}
& Q9 y7 e; B& J2 j
}
& b6 \0 W% X9 I8 [1 x
: e# S, w- S+ j+ w. @) o
}
7 U* n; O+ R. h+ T: W7 O
' t c6 A7 U, p; Q$ P7 l7 q
4 \+ b. W' l/ y* P* G `- h
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
0 U9 W) A, U' N9 c7 o( \4 t
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
% B- ^7 N% I1 g
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4