嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
4 E7 W9 Q3 R: F7 h7 x" g) s
Void UPP_TASK(Void)
0 C C$ w5 D! K0 W' J9 j
{
! w: v) N* }+ o2 M- ]' g
0 y$ A) n5 g$ n6 I3 {' [
int i,j,k,target_int_count=2;
! z8 d/ Y" m4 d, k, C2 c! |. \, s
char ch[2];
, ^0 x2 R) A2 ?: Q
) p( h, N( [* l4 m: B4 C0 y
: H5 s! e2 M. G: a6 M0 s
2 [) a; S8 u1 c4 J- ]! L% ~- Z- U
upp_interrupt_count = 0;
8 G& P* ]0 u" y, m
upp_error_count = 0;
- Q/ b' ]1 ^# U* Z
- R$ H& |- ^: x! L* M
UARTPuts("\tResetting uPP buffers...\r\n",-2);
, N4 D q: b3 W2 f- v8 G q. W
// Initialize data buffers
$ [. d; Z( R3 O% I- r
for (i = 0; i < upp_frame_size; i++)
) A4 d9 i# N5 B+ J B# Z
{
; v1 w Z, \5 [1 J4 V. T. E
upp_buffer_b
=i;
) C4 D g/ q0 Y* R+ s9 S! @
upp_buffer_a
= 0xDEAD;
* b, w9 t+ {! e6 L
}
% f* R! n; @2 C
9 Z& `$ c& Y& t" b* p
//for(i=0;i<1024;i++)
8 f4 w0 g! d; P6 f4 [$ L4 z
// temp
=0;
% j& H( U0 [; U- ], D5 r* q
7 w% ]2 i+ N( t! X: p7 n0 r
//UPPReset();
" h9 v7 v% E! [' k
/*启动UPP DMA传输*/
! [4 y6 C. z8 |6 `5 {4 n
UARTPuts("upp_prog_dma_i\n",-2);
) G' I. {+ ]4 }2 |% X' g p! U
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
3 ?& t8 o8 ?9 ^% W u, i8 f
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ f, w6 [6 h# [/ u+ @: N0 H
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
; o) t) H( h+ P% `# ]! B- n+ S
W* h& I* g: H! C' Q m7 s- x* H
UARTPuts("upp_prog_dma_i\n",-2);
$ |+ E, O* _* ^( E3 w: X0 S
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
- q' Z5 y/ ^1 L1 Y' z
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# i% E3 R, ]* C. n( e
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
( M/ U- W+ }% ~! L
$ H. j& D- I$ ]2 e: d
/*等待UPP传输完毕*/
* L3 ?# O8 G9 M: N( Y9 T# v
//i=0;
( J: P+ |! T, Y
//j=0;
4 o B. w) v1 B' T8 O, E4 q, z
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
7 Q0 _8 p' r' A7 M M5 ^ i& Y* _) c
{
: l/ C. F4 r4 X& a# \; e' U0 R
/* 测试UPP传输的同时操作普通DDR数据
( A0 o+ U/ ^# b7 b1 y. a7 T
temp
=i;
/ R3 J# V6 Z8 x$ {
i++;
) e }! i% @5 i. Y# @, `! s
if(i==1024)
' b: B' n/ D* H
{
6 {0 C: j: A( M4 H. s. ^; r% I7 t
i=0;
; V# q% R& [5 G0 G. E. o
j++;
/ y* w- x3 t' f% q( N" F
}
/ A" t; ^) a& X% I
*/
* i" F/ q9 P" Z: I) V* Z
, d5 g* ~( J9 D5 \8 U
asm(" nop");
! c- u _7 P, j+ G! L6 p
" {& F7 r) J0 E4 Y% S& z0 U
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
/ J; Y3 V: h+ {; l- e
}
6 W" C7 _% r/ l! b: U
& ~( @( W. P8 o2 }6 u& b
/*检查UPP传输的数据是否正确 (loopback modes only)*/
+ V- u/ j* l. k* E
//UARTprintf( "i=%d\n",i);
0 f2 [3 n- T; p
//UARTprintf( "j=%d\n",j);
% W& V" L& h7 q5 H o
UARTPuts("Data mismatch in buffers.\n",-2);
% [7 h$ t' M8 @- @! |; t3 L B, U
if (upp_interrupt_count == 2 && upp_error_count == 0)
9 q4 k/ S- x- z" T1 Y( A' v% ^8 `
{
% }4 a/ ~* R8 l4 }1 }2 ]
for (i = 0; i<upp_frame_size; i++)
9 [: A/ H7 K8 G$ W5 ~ ]3 M
{
3 d: }+ c- ^& E& }
if (upp_buffer_a
!= upp_buffer_b
)
5 @1 F, s7 s* _: S- S7 R% T: D
{
! b5 d: H! m8 w+ W0 D
upp_error_count++;
3 K& m( ]6 a; t7 D9 A( p5 p+ V
}
0 f, |0 D. L8 |/ d# p: J4 v, ]
}
8 Y7 k4 Y8 e' l( W" H4 U
}
7 ?1 m2 |' s0 q3 x/ S, `
2 z. L) C' I' X' ^7 p
/* 报告通信结果*/
: r, e$ ?+ K5 g4 U9 S
if(upp_error_count != 0)
) ^6 b3 q) i4 H6 C% o2 ^4 O! i* q
UARTprintf( "upp_error_count=%d\n",upp_error_count);
3 q0 u9 O3 c6 k0 j; e
else
2 k U0 K5 J/ }1 |+ R* n
UARTPuts("uPP transfers complete!\n",-2);
. k8 `1 i8 \# c2 T: [; i
( I$ D$ M2 N- j$ h! f
UARTPuts("Do you want to print all the data?(y/n) ",-2);
% W) u& |; Y! V/ h8 s$ G. e
UARTGets(ch,2);
! ~8 V! G/ a$ F5 G
UARTPuts("\n", -2);
! l/ d4 b4 O0 t: G' W# X- K
% K. A7 N6 d& \2 ]2 _
if(ch[0] == 'y')
# f8 Q6 r9 p" D) V2 q0 A# _5 I0 y3 |& D
{
z( O# N) D3 C7 C
/*打印全部读到的数据*/
3 p. l' k5 w6 I& \; ]
for(i=0; i<upp_frame_size; )
/ \; W% W0 ^: {8 K0 @; U
{
# v$ E0 ~# ~* u+ g1 t7 u
for(j=0; j<5; j++)
* v, h) Q8 ?; l% `; h; g
{
2 h% T4 V8 _- G' J* t$ Y
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
8 t* J9 ~9 N; @, i2 [+ ?: [: P5 ^
i++;
3 v2 d. d; v& ? W% B
//if(i >= 4096)
3 c7 u4 S# u0 ], O0 ^2 D
// break;
, Z5 q; Z1 k% K- @& l( K
8 Q7 e) K8 x6 D Q0 C4 _! j4 Q# V
}
; o* g% Q$ R. v4 ?3 n
UARTPuts("\n",-2);
`, Y9 M, u4 @7 U
}
( G0 V% P# e; f! }
}
, o- y5 o" C# ^0 d# X
, N1 ^ D% L: t; B* P2 d9 t
}
# E ^8 g8 p% O/ {7 _3 t) d- i
& L* T0 R8 V* X; N( y' k: u
/ k" w, o& i/ H: q/ v
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
+ ]. R6 U0 R) I" }3 w' f
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
6 g. H- W, B9 h) e% q
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4