嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
& @6 j* T7 c4 W3 ?
Void UPP_TASK(Void)
% e) {/ l- s* D7 k) J {5 @: K0 b
{
2 k& h7 v# V7 ^6 B
' X$ a3 H/ f! t/ |" j h4 H3 z$ J f
int i,j,k,target_int_count=2;
. A: X x9 D. [; x! E6 M
char ch[2];
- P/ B2 ?1 y/ ]: z$ `* Y
' c) T4 c1 \+ j8 m% I9 v
* j: G! L9 A3 U5 c
7 Y s2 G0 Y! W
upp_interrupt_count = 0;
7 k e8 e4 f- x& o1 |8 B
upp_error_count = 0;
& G1 [) D! L, q; w( [
4 ?1 G, E2 c, ?
UARTPuts("\tResetting uPP buffers...\r\n",-2);
C1 }. C" Q, l9 _
// Initialize data buffers
/ W) x, x0 Z* L) {& |# m8 W$ a
for (i = 0; i < upp_frame_size; i++)
^( j9 d* Z& `) `( g7 h( K: u
{
1 d. f6 r: j& n4 w1 _1 I
upp_buffer_b
=i;
4 M, g0 z6 T$ y/ L6 h# y8 i3 U
upp_buffer_a
= 0xDEAD;
" {6 b. u& y. i" B' ~$ W: H9 m
}
5 Z/ }( R3 F7 A3 [: ?, O
) f- ?3 I, M& A. v
//for(i=0;i<1024;i++)
! t- F; F! s9 X3 K7 Y
// temp
=0;
! P8 e$ H' a0 y/ n9 E8 ?
: x, G! _$ ~; w4 v7 m
//UPPReset();
2 C, o4 I# {* l9 ]$ B
/*启动UPP DMA传输*/
& {; f, h/ K& J: B
UARTPuts("upp_prog_dma_i\n",-2);
+ K* f: } E) a5 x p2 v" d
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
! ]9 @ y2 `/ ?
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" p' B+ z9 e- @! m: K7 L
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
- n3 o) b! q2 j- W( }7 Y& f- o5 Q, l- a
6 u6 W# V& Z7 D. Q
UARTPuts("upp_prog_dma_i\n",-2);
( |+ x. k2 d& _
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
' ]7 w- j- E. b; ~: [. V
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; R7 ^8 A- y- H* O& G- A! ]
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
* }) k1 i; F- G; e
7 D; J. c t: i
/*等待UPP传输完毕*/
" ]3 p, v" d# E' m" e5 ?, u
//i=0;
`. k" I9 e$ K3 L3 v! a
//j=0;
, a a( l. C1 D8 L% I6 p" h
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
9 ?8 ~) Y- G, w0 D% ^7 ]) L* @
{
* e: y9 F3 `9 }- V$ }1 R6 ~8 ?
/* 测试UPP传输的同时操作普通DDR数据
# o# n( s/ v% n" m
temp
=i;
& o& i( u4 X8 @. x+ S
i++;
2 k8 M9 { H8 W# I* k u" V8 ?
if(i==1024)
* m! U6 G$ A7 |' e) W, l. t
{
; w0 x y4 B% L. A. V% q' V$ @
i=0;
0 p% R( ] b! Y$ t+ ^
j++;
y# d: W, z* d- F2 f
}
2 r: @: M& Q2 t% z
*/
0 V! E4 I W6 ^' X; k* F
5 \1 \) V" l: S7 w! ]5 k e
asm(" nop");
7 p! e4 A( e# N' C3 p3 F: U
# a3 c0 K4 V* v: W! p
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
5 W, a+ m. ]# Y8 b# m7 o
}
& @" h( {$ I5 m
1 {0 M. k2 K3 P4 ]% Z. C
/*检查UPP传输的数据是否正确 (loopback modes only)*/
1 b, {! b$ \$ W& U* ~$ w
//UARTprintf( "i=%d\n",i);
% P! `/ M5 V T& Z& M; r
//UARTprintf( "j=%d\n",j);
: o0 ?8 @, c) Q6 J; q
UARTPuts("Data mismatch in buffers.\n",-2);
7 C: q6 A0 v! `. o& a, G
if (upp_interrupt_count == 2 && upp_error_count == 0)
5 ~# d) _ x! q( V$ f8 X% A& c
{
" d" U$ C# y+ x2 o' l4 V# ~4 O
for (i = 0; i<upp_frame_size; i++)
# u. U. [! p$ \6 w& Y. M
{
; v5 t1 v/ b1 A, J! M! ]5 q
if (upp_buffer_a
!= upp_buffer_b
)
, b% G& M) {: \% {
{
$ p8 }: \' f5 ]" `+ W
upp_error_count++;
8 @, N0 |( Q2 Q+ `5 W
}
3 ^! W& L; f1 `) W9 V- X9 T& R$ U
}
( X: w3 R: n C1 r8 i7 I3 Y i- {
}
; T5 o) [2 P# d% _5 |
) r& l% i- p: b, D5 ^& R
/* 报告通信结果*/
' u/ ]- Z N2 G; C! S1 d: G
if(upp_error_count != 0)
/ Z( G9 t) D& m+ N* A% |
UARTprintf( "upp_error_count=%d\n",upp_error_count);
, j: M Q8 x0 l& ^2 v, u
else
/ A6 O3 S6 G1 ^1 w' \ f
UARTPuts("uPP transfers complete!\n",-2);
, R5 ~% H4 n: R
# P" T- A% ~3 M/ I* h9 V" L
UARTPuts("Do you want to print all the data?(y/n) ",-2);
# n, p0 g5 F0 k7 k! b- }
UARTGets(ch,2);
+ B, N0 e- c$ C8 y, y- y% @
UARTPuts("\n", -2);
/ m7 x# K! T/ Y% D( l
7 H9 |; I- k5 f+ y6 B: J" x
if(ch[0] == 'y')
& l; O/ J& G& O, E8 u, g
{
4 ^5 J n% U* D! |7 h" \; h
/*打印全部读到的数据*/
+ |' Q) k/ Z! l9 t
for(i=0; i<upp_frame_size; )
M+ z( m# C5 n
{
' `: o4 }+ f. w" {3 s
for(j=0; j<5; j++)
5 {: ?# l9 n7 R7 | F+ ?
{
1 K5 v4 H2 A6 g+ w
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
7 s* F* s m7 M, [ [, y* t+ {# ~
i++;
: S$ K- c, }' X3 K8 f
//if(i >= 4096)
3 A4 p' s- l7 J8 x8 k( M
// break;
0 Q, A8 U3 N9 N0 q1 Y4 E
+ S) c8 n& ~$ w/ [
}
! e% q0 R1 D& z( e
UARTPuts("\n",-2);
$ p) l: ~: s7 e
}
' E5 W1 b/ T- F# L9 I+ }& g
}
) U/ t" X" h* m* }. G
/ F2 r4 T& g$ M6 V- E& m4 Z
}
3 v2 S$ N: G2 Y M J# e
( k) y+ S+ }( \3 B+ ]! ?3 r
; _2 v8 ]5 V, f+ L0 A2 z
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" Y( z2 b6 G: ^1 Q/ Y9 B* A
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
: Y9 p$ n9 [2 Z) ]7 w
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4