嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
& Z$ l0 k3 X z+ M# j1 N
Void UPP_TASK(Void)
5 C% U; d2 a ?, z8 R" O, `
{
6 ^2 k T% D S) A
; \, T* w3 T8 o& _ \, r2 \) V# K
int i,j,k,target_int_count=2;
! v7 G$ \3 W6 O" k# B+ A- M \2 B! t1 z
char ch[2];
) U- z1 _, S) y& H
0 p1 w' y/ H9 f0 W
6 }: S1 w" E) H% J
( q5 i. R6 {- N2 h3 g
upp_interrupt_count = 0;
9 Z7 z" x6 A5 a
upp_error_count = 0;
|% I% _7 }7 {- ]# D
0 B3 Q/ J! q7 W5 U2 W7 _
UARTPuts("\tResetting uPP buffers...\r\n",-2);
0 m5 N& B4 y& d4 ?# V
// Initialize data buffers
( Q v9 n! |. C) t$ Z& g1 f+ s
for (i = 0; i < upp_frame_size; i++)
0 Z: x9 i" _3 M+ p
{
# Y6 T4 s, G$ z h9 F5 \: r
upp_buffer_b
=i;
1 H% T ~7 i4 X" {
upp_buffer_a
= 0xDEAD;
5 i v8 V8 Y% ^/ e# o
}
0 L, B) m3 Z) B. f
' L) A! ~5 E# n' |- Q" |3 K
//for(i=0;i<1024;i++)
0 o* }; m. _ K! o# Q2 J3 ?! |; ^
// temp
=0;
7 p5 ~! T5 C6 o; E# D3 H
% {: }% p: z1 ]; d! @! v
//UPPReset();
! \% k( M( v( Z2 [3 G4 j3 T
/*启动UPP DMA传输*/
( I, ^$ G& s! ]% q1 K6 ]8 C: y0 y4 D
UARTPuts("upp_prog_dma_i\n",-2);
n, K; O% K1 K6 P0 T
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
, X: Z# [ n* b% }5 H+ c( O ]
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 k8 r2 y) K. |0 v, y9 l6 \
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
/ b5 i2 [2 N5 Y
3 J; k V* i. M- i, o9 u" G0 k s
UARTPuts("upp_prog_dma_i\n",-2);
0 N1 v$ H3 C! X3 S; Z6 b- C. {. O
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
0 k. A/ n; l$ W& n' G
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) W& R6 J, L+ L3 z; w; T3 g/ G5 ]
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
# W) ~' u, h4 G' n/ u4 r3 [7 L
0 x& x3 M* V# e3 c4 b3 {/ g
/*等待UPP传输完毕*/
& b- i- @& r4 C b
//i=0;
! w+ \6 `& X; J5 m) w
//j=0;
- S$ ]! `& o* ~' t' D9 u
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
' d& P4 E5 O4 G
{
& X8 K, e) w' ^
/* 测试UPP传输的同时操作普通DDR数据
. I2 a6 o: f5 ]4 e/ b T1 {2 b
temp
=i;
' @% D* L1 l2 M9 f8 l/ D
i++;
" | |; V. d/ }/ X0 L+ E& L! p% @
if(i==1024)
' f) r, t3 q5 e6 T4 B8 w/ F
{
/ j' x% l) T$ W& |( h" N
i=0;
: f" P) F# }2 b; r9 q( ?
j++;
6 r7 ], a# ^3 u" Q* g" G+ T
}
& y1 C/ N' S) n9 ^* b: O+ w
*/
2 a1 d6 F0 c" \/ J& ^
# e$ Z( r* P8 ]+ R X5 `' {
asm(" nop");
8 [/ G+ a8 f/ e }/ S+ p
" ?+ ?: v9 R0 n
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
* U, c- O* w8 B! I4 ~2 I* e
}
. M J; c: l7 X0 ]1 i& x% ]
0 J: j- n# g" y3 a* ^
/*检查UPP传输的数据是否正确 (loopback modes only)*/
' a/ l1 x* c) r& [7 C. }
//UARTprintf( "i=%d\n",i);
) ?5 Q) a( p' A7 F* o
//UARTprintf( "j=%d\n",j);
1 _$ U' {% J- ^% `5 d" z' @
UARTPuts("Data mismatch in buffers.\n",-2);
6 e+ ^& u' J5 E7 I
if (upp_interrupt_count == 2 && upp_error_count == 0)
0 d3 w) \. C$ H% t' \( X& r) e
{
0 ]0 b* Y* r. d1 h
for (i = 0; i<upp_frame_size; i++)
$ [; ~& `: H" T1 f$ t
{
4 i/ ?' k7 v$ m' b2 x! G+ o
if (upp_buffer_a
!= upp_buffer_b
)
. ~/ v/ V" d+ U
{
) U: R. I [) `6 [9 ~
upp_error_count++;
0 s: D, a0 F/ e8 H2 f
}
& }+ `2 l9 D1 ~; E3 H) ?
}
+ q) U- e3 N; u+ Y' q- }9 z
}
4 f3 x" d, j% }
! k. i0 E, g8 A9 I" T
/* 报告通信结果*/
/ q; S/ o, z1 ~: ~% Z
if(upp_error_count != 0)
4 e! V) O: J: D. @: I$ D8 n
UARTprintf( "upp_error_count=%d\n",upp_error_count);
& N* e. O! V7 `3 B
else
! F- b8 t+ f9 i$ }
UARTPuts("uPP transfers complete!\n",-2);
4 L7 J% \6 V4 @- G+ S$ [
( J% y, D b/ u2 i6 C
UARTPuts("Do you want to print all the data?(y/n) ",-2);
0 R! X9 y9 R; p6 }7 I3 ?
UARTGets(ch,2);
/ t' L) C: d: z3 X- q
UARTPuts("\n", -2);
y' Y2 S& z3 \3 o
6 A8 y4 s$ E& i
if(ch[0] == 'y')
: w# ~! O: p) k* L* U3 |2 }1 H" i
{
2 |6 T, \* h7 N# S# f8 Z1 P! y
/*打印全部读到的数据*/
) O. m" R6 L' a* C7 A% P
for(i=0; i<upp_frame_size; )
* _( G- ~+ s( g) K0 y8 l3 h
{
0 Y- P1 _# i; e H9 u" g
for(j=0; j<5; j++)
+ _* f# C+ U$ }$ K* {1 q
{
" I: U2 s* g: Q: B6 O$ K2 B
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
) l4 N) h+ t! ~ t0 L$ y8 t
i++;
d: l( k- A" V2 g
//if(i >= 4096)
% A. e- E7 C. v! Y& L
// break;
7 u& {" B7 ~3 m3 x/ G. t
4 [* w$ z7 r |
}
* U/ j; Y# ?9 k
UARTPuts("\n",-2);
. S! O2 Y4 v4 |5 u) J" ?' N5 G* f" g( B
}
0 L }; V! L) n1 w' Z( ?# ^) j
}
Y6 p+ i" q8 m# d; v& ^
- `) V: g2 a$ @
}
8 I7 G, `+ d% q
- @- N. _$ f) Y" W
# T ^- k8 C% E8 G' d
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
. A. b# `/ ?* I* T: i
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
# t0 J& R: T+ M5 m6 R' g. u
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4