嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
4 C% y: e% R: q8 ~: D% T }& P: c
Void UPP_TASK(Void)
1 |' l8 ^7 l0 T! U% s
{
$ J w' u$ b# Y/ u; g
$ W! A# t6 ^0 l; ]
int i,j,k,target_int_count=2;
! U8 l7 C5 G y: z; k
char ch[2];
5 L0 V- }' B6 j$ ~9 F
3 O, q5 M& L6 z6 X$ ^
. l: X/ d5 A1 [4 W' J* Q: ?
2 x7 e: s2 A4 u4 i% {7 _7 S
upp_interrupt_count = 0;
& o7 h! f. Y; H# e, ]
upp_error_count = 0;
# B! D7 K7 k x
- Q1 a, ?' a" ^/ [5 {
UARTPuts("\tResetting uPP buffers...\r\n",-2);
. x( _5 ?) A) a n
// Initialize data buffers
# X: w, T8 m, u4 I8 @: d
for (i = 0; i < upp_frame_size; i++)
5 T6 p1 g' e* W
{
7 ~4 {3 D8 z9 m$ {: M Q) s; e
upp_buffer_b
=i;
3 A9 f; i0 P) }
upp_buffer_a
= 0xDEAD;
2 j4 g8 j/ P+ F* ~7 t H
}
( M$ D+ v4 R! [ }9 K% l
! f( a d" h, a2 m( W1 k
//for(i=0;i<1024;i++)
& h! \7 m6 t9 w
// temp
=0;
7 ~( w5 X6 l) |) s3 _+ ]4 Q! w
/ B4 l; w$ p, r% s% N
//UPPReset();
8 n* p5 T; I' D. D
/*启动UPP DMA传输*/
; z4 z4 _, O/ r' i9 S" A0 _( j
UARTPuts("upp_prog_dma_i\n",-2);
4 t. ~5 Y h2 \0 N& }# @
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
6 o& c, e! e8 K$ s. H$ a' q. ^( N
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 K, c9 H: X F
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
* Q! ?+ M: O* u
) |% Z9 g5 l' W. S& v$ n2 s9 I
UARTPuts("upp_prog_dma_i\n",-2);
* L+ O1 I+ ?0 W6 N N
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
+ T, m/ c7 z7 }; g% _8 J
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 p8 E* }6 P# I4 _, u; Y# u$ z
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
0 f3 [7 D' i" V3 b% K: q
, J9 y- }! f8 T' v2 l
/*等待UPP传输完毕*/
$ w: Y9 W4 h! A" Q" Y! w
//i=0;
4 ^2 p% q4 w# ]" q
//j=0;
0 |5 @0 P3 l L2 e+ ~; _9 Q1 y! q( t
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
1 n( x) q& d* e* [5 N, `4 Y
{
# E& L7 l3 u" i+ @; b
/* 测试UPP传输的同时操作普通DDR数据
2 B' U3 O3 ^2 H
temp
=i;
& b4 V O+ _6 ~' r) u7 {1 ?5 I+ a
i++;
* Z c) J9 x5 i* P# g' F# ?" Y
if(i==1024)
* z, Q/ K5 N1 k
{
0 S9 g8 S! z: r9 l* w
i=0;
% O" ^+ l! f) {% v" U
j++;
1 b9 H" x1 D6 |9 c" j
}
7 h* O5 Q: z( l) j# N% N( `+ ?
*/
V$ O4 M+ |& R# V: P
$ `/ _9 q* @- N& T
asm(" nop");
- R" A6 }7 }3 n- [8 F6 e
6 d% h( V' J: P2 M
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
& |" |! ^+ |/ H4 ^ Y' q4 J! D
}
+ z& f5 `& G3 ~2 T B, ~
& P) q3 p$ R: C; t8 a5 F/ s5 F
/*检查UPP传输的数据是否正确 (loopback modes only)*/
, A- v9 s* c$ K# ^4 l2 E1 y( R; F1 Z
//UARTprintf( "i=%d\n",i);
7 P) e- S/ H3 k$ w; v T
//UARTprintf( "j=%d\n",j);
0 R$ v7 a1 _* X" z* D8 T& j, o
UARTPuts("Data mismatch in buffers.\n",-2);
) F1 O- N4 ]/ v) _+ |, Z
if (upp_interrupt_count == 2 && upp_error_count == 0)
9 h5 R2 }7 T* t& T! u
{
! c( ]) }4 Z4 V M/ }) l5 N
for (i = 0; i<upp_frame_size; i++)
" R3 ^2 o3 V, k( m; {+ Q% w4 ^( U
{
: A9 B% d5 T2 v$ _
if (upp_buffer_a
!= upp_buffer_b
)
7 H: x. I1 |6 }
{
7 j" }1 t* K$ A7 q$ B
upp_error_count++;
% w" w' K# [. q, G7 |2 M8 b8 l
}
: P' j* Z% ^' ?% K- ^
}
+ Y) x; p# p' b/ Y
}
% Y8 h; H( R- T8 Z; c. i. I
3 `6 X4 e% h: g8 w. x$ b, F5 @
/* 报告通信结果*/
. y: U, J0 ~6 d0 ]/ a5 M3 @! S
if(upp_error_count != 0)
& b; Z+ k' w9 z
UARTprintf( "upp_error_count=%d\n",upp_error_count);
) a# a2 N* O% {! j! t k1 L
else
1 O6 K5 f/ s ?6 x2 R) M1 U+ \
UARTPuts("uPP transfers complete!\n",-2);
2 \0 F- @& p! N$ o6 p
5 `* N0 `6 @* p; H5 Y8 H" T
UARTPuts("Do you want to print all the data?(y/n) ",-2);
3 k# e+ A3 b- } e
UARTGets(ch,2);
9 v( s$ |6 }% R/ r- F
UARTPuts("\n", -2);
( ^8 R6 G/ ]& V7 j7 `
. C# d4 _9 s7 D! Q6 m1 T3 Z; D
if(ch[0] == 'y')
, W, O+ P1 N9 t. ?5 j' k
{
" V' ` F9 |/ E q1 Y# V1 {
/*打印全部读到的数据*/
# @+ H1 C# t+ ?9 P* ]
for(i=0; i<upp_frame_size; )
, _: V7 {4 D A8 A7 q# |2 ~
{
1 g. k3 q" a, c# J$ K5 f
for(j=0; j<5; j++)
5 U, A& G% J4 \! [+ v
{
9 q! V( F. C4 U, O
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
0 ~5 g! r6 @3 P) J
i++;
+ a9 ~% W5 r( D( Y. f8 o
//if(i >= 4096)
2 v7 t$ L9 p1 j( s* o' [! F
// break;
, H9 z! z# R$ m! M* r2 l5 l- s
# S B0 U" _- x1 C
}
4 K& ~. t1 k7 h# ?2 B- c$ G$ k
UARTPuts("\n",-2);
! N3 H1 n+ S( p% x+ q( W$ F6 }& Q
}
% s& ?& h# T7 m k# _
}
7 K& E- F5 I* Z! ^- N8 L; V8 a* {
Y7 b/ P, z- G' w1 i+ f2 r
}
0 y0 ] N; d. u1 ?) r
% [( `/ F# R2 w" r* H% x1 q( t$ ?
; A+ S: \1 I! r3 u+ \6 R
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
1 F/ h- b% w4 f' H5 `
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
5 z8 O7 p# [* N' }- j5 c" o
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4