嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
+ V: x& G" T0 p: j. D$ T; v: p) K
Void UPP_TASK(Void)
- i2 B2 ^- H$ L. D$ v, N/ R
{
2 c0 R$ U& @# u& f, b6 \
; `8 S( V0 B; N9 r+ O( H5 C; I
int i,j,k,target_int_count=2;
2 y& t4 c+ D5 C1 d" s. @& Y; T+ m
char ch[2];
+ }0 ~& k g' F, c T2 C
0 J! w% I; H$ \) m4 ?# i u( F
& c5 W# \- b! ^: [
$ T1 y& H# U0 j) y( R, s
upp_interrupt_count = 0;
5 n3 F' L+ V9 C& n, o
upp_error_count = 0;
, z6 e) Z4 E/ t* h! ^; T
}1 M7 G% A7 [4 a( G3 J0 Q
UARTPuts("\tResetting uPP buffers...\r\n",-2);
6 I; i( ~+ c- m" _8 B. f* Z; g
// Initialize data buffers
2 n' f+ m6 R5 f/ f' r7 p' V
for (i = 0; i < upp_frame_size; i++)
: A( i+ C9 d5 b, v
{
, {: V# F: M/ H+ m, ~- a
upp_buffer_b
=i;
6 D0 I' ~% l* m
upp_buffer_a
= 0xDEAD;
# M/ e8 s* B9 u8 m" B+ K) Q5 t. _
}
# \1 M. m. ]9 f; \. \
& e- z7 N } w( y3 ~
//for(i=0;i<1024;i++)
# }; `' Y! z6 C- n& e- E, d
// temp
=0;
1 Z; m0 F0 p0 N( L! M9 W. b
. }8 Q( @ u( r$ B1 S# ]8 P
//UPPReset();
9 R0 T e" ^. k/ r: y
/*启动UPP DMA传输*/
/ v. G g7 |1 i$ J4 k
UARTPuts("upp_prog_dma_i\n",-2);
" R" v+ E9 T0 u9 I: P) y
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
8 H# B4 |5 w" A# n0 c+ V- l+ _. [
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( p1 O( g3 B; C1 o
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
& ^) X' Y j, @$ Q X
N% i3 q6 _; n+ G k
UARTPuts("upp_prog_dma_i\n",-2);
G' ~% k5 B8 T7 v0 p" n
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
% s9 W: @& B; p& Z6 U: D, W
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) J! U7 ~) G3 R0 o7 {/ E
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
0 j$ n, Z; k6 y* l5 w
% \6 }$ }0 o- I' ~& w! O$ f; Q1 E7 I
/*等待UPP传输完毕*/
) h( w& J5 W$ z5 w+ J5 ]
//i=0;
" c; m c( t: {
//j=0;
/ E. ]8 M- S! C9 V% Q$ o7 e) l
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
( v! N% @% h @! V5 G# r* C) F1 z$ c5 e1 o
{
6 r- A( n7 G6 L" N, S8 I
/* 测试UPP传输的同时操作普通DDR数据
; M2 D% {, _! d" j4 w% l3 b# x
temp
=i;
" w* z6 F' s, o4 ]4 R6 n
i++;
# H; E/ i6 B( ?4 ^6 B% T/ ]
if(i==1024)
! @6 m& v9 y m' o# d( o
{
) W7 s7 i* M8 U% x1 x
i=0;
+ I) {" |# r: G, Y8 o
j++;
' Z0 U0 i& I% _. Y1 P. u' f) H
}
" O4 S3 A& i/ P' `
*/
2 v5 n3 U! _4 m0 n
' ?; Y* B2 ~9 l' f' H: I- x
asm(" nop");
3 w0 B3 ~ v3 p! F2 \- B
. x6 C" t$ F s
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
& B2 L1 e ^% Q, l" i" w2 Z
}
8 t$ j3 D+ e. g c& z9 D
1 [, Q* _/ w: t
/*检查UPP传输的数据是否正确 (loopback modes only)*/
, k G& o# O2 _0 }9 l1 |9 D) o
//UARTprintf( "i=%d\n",i);
( \0 j0 r2 i: Z& Y$ E" K" U: [
//UARTprintf( "j=%d\n",j);
8 a& [* A4 y. j6 `- \/ p+ k
UARTPuts("Data mismatch in buffers.\n",-2);
: _0 l- k* c- `6 y( z- L, n: z
if (upp_interrupt_count == 2 && upp_error_count == 0)
5 P& j Q) R* J- Z
{
5 D6 R+ f$ V0 T: i& |5 [( s# @8 q
for (i = 0; i<upp_frame_size; i++)
+ Q; ~) R! k$ I, X
{
& a' Q$ E1 u" S; r: H2 ~ z* i% {: E
if (upp_buffer_a
!= upp_buffer_b
)
- P; Z6 q+ [! b. f: N& d. y ]
{
0 j' t3 v% N1 b5 F' u. F! d6 K
upp_error_count++;
+ s# ~8 }: D" \6 i$ g, B7 D% W
}
/ w- M1 n" s& D9 z+ C
}
/ V9 S+ S7 p# A2 S. u
}
# m4 M, s6 ^+ r" {( y
0 C3 V* s7 t1 J+ W, x
/* 报告通信结果*/
6 S" x1 T+ }. `7 M
if(upp_error_count != 0)
. |/ @5 J! F# [3 z8 v/ ^4 I2 K: r3 l
UARTprintf( "upp_error_count=%d\n",upp_error_count);
- l" T' v; L( {/ ?# g" c7 R6 Y7 p
else
- u. Y: v: N b
UARTPuts("uPP transfers complete!\n",-2);
# W1 ]8 y" s) p% G$ l! d: h
( k1 _! U4 f9 p( D5 T
UARTPuts("Do you want to print all the data?(y/n) ",-2);
% K+ \. ? n5 G; ^* U; R. T5 I9 W
UARTGets(ch,2);
# Z" V/ B% R* t2 z, G
UARTPuts("\n", -2);
/ e5 _2 p8 O A+ B+ z5 G* L* N
2 Q# u: G: [/ t
if(ch[0] == 'y')
8 p2 r# C0 k* [ D7 H
{
5 ?, ^$ V) k8 Q/ M% e
/*打印全部读到的数据*/
/ E" m9 j Y) i0 U& a0 O7 k
for(i=0; i<upp_frame_size; )
3 y1 R- N3 E a5 @/ S! k4 E, G0 I: V
{
: J/ T6 d. i4 }+ ], c
for(j=0; j<5; j++)
) q! X" W4 }' X5 r. ^# _, c
{
. O8 h3 @6 H# z7 Y, y, p
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
7 A' L( Z& }- h7 ] [
i++;
8 a' B9 R0 f" Z% \3 a' E
//if(i >= 4096)
0 `7 d& \% @7 m3 m
// break;
$ B% R/ x6 T: G$ f& k2 @5 ]
) F) i$ M, M \
}
( T6 f% j$ _: J0 D( k, }7 q+ T- n' \
UARTPuts("\n",-2);
+ ^; \7 u1 H6 B% H1 D/ l% _
}
/ v; j; K P5 l ]! L
}
/ S* W% S6 w% r+ \# p/ N" J
% W- G9 {. R1 v
}
; x& k$ }+ ]/ X/ A/ c s
. A/ d+ S( ]* H& G' W5 l1 I
/ V O( q8 ?5 j
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
) k l; o1 i6 t2 z; g& I+ _
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
J" t/ R/ L: P! j2 {
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4