嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
( W+ t' B X$ v# s1 V+ a) C
Void UPP_TASK(Void)
5 o2 T5 L5 ~/ G0 ?0 z
{
$ X/ l5 h( \, M* l
; b0 b2 J3 [2 l
int i,j,k,target_int_count=2;
7 W3 G, k. w2 u0 z. W
char ch[2];
8 a3 p6 \1 c- i$ ^
8 T! ]5 {/ j; R+ r- U; |
6 Y$ R/ a9 _5 q! Y0 y
. @, y& i' z) @
upp_interrupt_count = 0;
/ f; [/ _- @+ T E6 v
upp_error_count = 0;
* g9 K+ Y6 P% r5 U) Z
2 v+ J" c) W, C7 E: Y1 P
UARTPuts("\tResetting uPP buffers...\r\n",-2);
1 `3 Z* D7 U3 c
// Initialize data buffers
) K0 B+ p6 l; X/ R$ J
for (i = 0; i < upp_frame_size; i++)
2 ^- ?* R( b& }: \! u: Q2 w' }
{
) ?, w5 ~0 h' ^2 n) Z" `. y% P
upp_buffer_b
=i;
* V; I7 ~4 Z o( o; k! a( ^
upp_buffer_a
= 0xDEAD;
% d' O, U$ N* g' b. ]$ Z7 l
}
1 ?; K/ M1 `, o$ K/ l9 C4 S8 O4 H
; @3 @+ S6 Z3 k2 _
//for(i=0;i<1024;i++)
; h: z8 x1 D! n4 q: O4 w6 _
// temp
=0;
% ]: q+ x% w6 d2 p' F) v
/ W) ?: G7 y1 O! K" p
//UPPReset();
! t" r/ e+ d9 s" [/ `# k
/*启动UPP DMA传输*/
* m; r. k8 p4 E U
UARTPuts("upp_prog_dma_i\n",-2);
" Y! S( M) n9 p, R5 d) Z, n
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
5 e$ x- t7 @. E6 m/ ], ]% o9 E. {
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 I; p" |- t. u m* L! d
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
/ u7 B6 P5 v& k4 g5 P
" B. @0 d4 Z* r* U6 e
UARTPuts("upp_prog_dma_i\n",-2);
6 L% K& I, d7 P$ |+ {, t
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
3 u" n* c) n X! g% {
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ L9 _3 @$ Q6 Q6 ?0 S+ `
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
. P; D0 a; Z, J' B9 k
4 n, a6 D) L5 _: v
/*等待UPP传输完毕*/
& v/ z' v7 s1 K; k4 p* F% u4 z
//i=0;
! x% O" S8 J3 l* i2 n+ x
//j=0;
$ z# ?/ d4 c7 Y g1 u! B
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
! W. n0 b; y* h% x/ c, c% Y
{
4 F2 @+ j1 g( t
/* 测试UPP传输的同时操作普通DDR数据
0 q$ n/ ]5 A0 [0 J+ `7 e @
temp
=i;
s5 s8 x8 {* _$ P
i++;
8 T8 Y- u: M* F
if(i==1024)
{$ i+ ~2 N1 P. A* u! _2 q: Z
{
* G. i M9 ~) g( g# k4 E! {" M
i=0;
" T- J# c* J1 Y7 u. e+ I7 m
j++;
: O7 u" K1 h% z0 L4 y, I' M2 e
}
( X1 |" S4 M$ [- Q4 B: ~% y7 T
*/
. ?6 \1 b2 i; b
4 @ d5 y$ l3 j# X& t) _8 a% V5 ~
asm(" nop");
4 I$ B( a8 l. T
2 a7 U. {' V; N4 ^1 B
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
' W& e" h+ z8 I& A% u0 Y
}
4 _ x. K7 Q) A+ K# c
" W) o9 k( ^# s; z/ E0 @# c
/*检查UPP传输的数据是否正确 (loopback modes only)*/
% G G2 W$ A* `6 X0 V( I
//UARTprintf( "i=%d\n",i);
4 z f _1 W t* f4 x3 K" G3 I" `
//UARTprintf( "j=%d\n",j);
% n- D( Z+ A, D0 M. v: o9 t8 E1 U
UARTPuts("Data mismatch in buffers.\n",-2);
9 D8 U# x) a5 p- b C
if (upp_interrupt_count == 2 && upp_error_count == 0)
C" T' y5 H$ M0 K
{
4 i/ O' _# H4 e- {
for (i = 0; i<upp_frame_size; i++)
* z2 u8 I3 {. I' |4 i2 ], o
{
2 J; Q; Y, o W/ z. V
if (upp_buffer_a
!= upp_buffer_b
)
0 h' O1 c) Y; W
{
! f$ y0 ]% {' F/ y
upp_error_count++;
* A) v1 {2 Y; T
}
' w$ H7 x, w/ X
}
4 ]5 Z& l$ D9 K* Q
}
. o5 I+ D- s) }+ F; r M
1 H: X$ t0 p k; A: G, }
/* 报告通信结果*/
8 c4 D" i# T+ L6 Z7 x1 D9 C
if(upp_error_count != 0)
r9 t# O! E1 J! l
UARTprintf( "upp_error_count=%d\n",upp_error_count);
3 k2 @( g) n4 P/ N3 X' W/ J
else
9 i9 s+ }9 s: f3 z0 m
UARTPuts("uPP transfers complete!\n",-2);
1 g; ~; u2 ]* F3 ]
2 u5 U8 d* v m
UARTPuts("Do you want to print all the data?(y/n) ",-2);
2 L- A9 x0 b0 G/ p% h% |& l
UARTGets(ch,2);
, d" i- I+ o' h2 t* f& p& y* s
UARTPuts("\n", -2);
5 b+ C! E$ d0 n( u+ {' j
7 c1 [. @ G5 q+ \; ~; M0 u, V
if(ch[0] == 'y')
6 ]7 p5 ]1 t: i3 `2 _# \
{
2 d. q' q8 T: |7 I# ]
/*打印全部读到的数据*/
; g. `2 j0 s& h) F
for(i=0; i<upp_frame_size; )
) E9 k/ o9 R1 w0 i; t
{
% f* D# Q# ^, n. L# x0 s8 y+ [
for(j=0; j<5; j++)
0 I0 z) m0 R# w
{
~! i6 V4 M5 A" H; t
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
9 b) M# `( s }4 @
i++;
! {, M' D+ b1 h- d4 X( W* O, j! r
//if(i >= 4096)
5 m5 @! A8 m4 \7 g, r$ O
// break;
% n9 n$ U. t) u- {2 F
, T; E' M+ f( r5 V, f8 c
}
+ [4 O- W; a" e) Z
UARTPuts("\n",-2);
% F, R6 \% z3 |. w
}
, `: q# E- Q' d/ Q
}
% D$ K9 ^& c! R4 `
) z+ V- d6 A2 F' f( [" q
}
1 I; @9 }; x4 `: f( ~! g
) `3 b) Y1 i1 ~" S2 @" H3 {( } |6 ]
9 _3 l: U& C- v, x7 ?7 w0 A* `
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
& }& y* [& A r
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
4 o1 {: y; p% t0 B; o& h
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4