嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- k ~/ K! B0 \* i0 f
Void UPP_TASK(Void)
9 b% N# E" ^# n I* q; N
{
( j1 b3 p% P0 d8 C6 B. t
4 A5 p Z- y$ G( s8 m
int i,j,k,target_int_count=2;
y/ }: ]2 l ?9 d6 ^+ @4 G1 u7 Z
char ch[2];
; y7 r! k0 ?$ _% i# D G$ V& o' F
8 w& w# C& b) B$ x" B
' r7 V$ w( c$ s" A8 N3 ^8 B
: g* E8 q7 |! [
upp_interrupt_count = 0;
K2 e L; n! q4 ?( ?& V" r: R
upp_error_count = 0;
: D5 g# n; o4 o- X0 {1 b& p2 J
4 c: ?; l" z+ r m/ u) [& V, _, |
UARTPuts("\tResetting uPP buffers...\r\n",-2);
6 G8 {& y( X7 {0 q5 ]
// Initialize data buffers
' i, F, T& A( N. g* M
for (i = 0; i < upp_frame_size; i++)
3 A7 x5 n8 a- O' z( s! Q, \5 S0 |
{
+ C) ~5 p' } r3 R8 @0 D
upp_buffer_b
=i;
4 Q# z. q" c8 u i. v
upp_buffer_a
= 0xDEAD;
$ ]9 q0 C; K. L7 E
}
$ q+ j( G4 O, o& p
4 J6 W5 N8 \& w! A: O7 F& v L
//for(i=0;i<1024;i++)
6 b+ F: a6 h8 q: |4 k' E- n* F
// temp
=0;
. ]+ l' l3 y8 \
; U3 }+ p" a; l* K' y
//UPPReset();
; X2 ?5 r6 n6 n, t0 O7 q
/*启动UPP DMA传输*/
, O. E; x7 a& Z4 v6 N
UARTPuts("upp_prog_dma_i\n",-2);
5 _' ?: x, N, U0 e @( g2 h
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
7 v9 m+ n1 R2 `. ?+ d
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, L8 L6 U# ?" K
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
3 S' k% ^! O& m# y3 M* y- u: X/ H
; _" Z/ S/ o$ k0 E/ F& w5 b
UARTPuts("upp_prog_dma_i\n",-2);
3 x# s" t( h, Q
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
' |* R+ Q: ^& E& W
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) N9 H3 r6 a) e; W, Y6 c
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
# h% A6 t7 q; ~) t0 M% w9 O8 Z0 h
! n$ p7 t; A; k$ Z1 L
/*等待UPP传输完毕*/
! R6 ]0 ]" ?- U) O# b
//i=0;
+ r& Y8 d) [+ a) e
//j=0;
* H& M1 p* {" [$ R
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
" {0 n& N3 c4 `0 e9 a7 a
{
, `7 w8 R5 o( L+ v1 S+ P0 a
/* 测试UPP传输的同时操作普通DDR数据
) O: p8 V2 K! Y' m- s
temp
=i;
' `2 x. M& L- w% V* L0 D9 L
i++;
) f% }. _' ~- C x- Y* c% W/ q
if(i==1024)
3 V) K$ v/ x' F" r7 V, F l, a2 L$ e
{
. r( m3 R! g! H% g6 u
i=0;
3 [9 w; U0 a* N3 n7 E/ V# f. w% H
j++;
$ M& d, ~% j2 A% @3 C
}
9 U" x$ e l$ i J
*/
5 w8 l D, M- h" E) O" w2 k
+ y/ G( C8 _9 Q9 o! m
asm(" nop");
* U& a( ~7 B) x' f
0 K' H' l, w, o# L" I
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
6 s) s7 ]$ H9 ?) q
}
$ @( O1 f7 }7 x8 a8 j
) j, \! T/ w/ s. H% i1 ?- Q( X1 ]# O
/*检查UPP传输的数据是否正确 (loopback modes only)*/
% o# o4 ` z! P' t
//UARTprintf( "i=%d\n",i);
: y6 t- O! W, O3 E% \ ^
//UARTprintf( "j=%d\n",j);
. Y+ I; q5 r# @
UARTPuts("Data mismatch in buffers.\n",-2);
5 g' ~( ~6 \+ ^: G
if (upp_interrupt_count == 2 && upp_error_count == 0)
4 y8 z/ }; S# M2 y3 E" G: q) P/ A& p
{
! O0 o7 Z4 x8 @; M/ H+ l3 G7 L
for (i = 0; i<upp_frame_size; i++)
- R) X: m! |' o$ ?
{
/ Q6 M8 Y; Y+ ^) Y
if (upp_buffer_a
!= upp_buffer_b
)
D$ A) u5 y- V7 q
{
+ S- O9 a1 f7 t+ D% E
upp_error_count++;
" S3 K6 U# |2 W; Z" x5 {' l
}
' }" \) o; K2 m- ^ \) w5 s
}
6 w' ?- A7 g2 u$ G! Q* a
}
% p5 m, S3 D. v) W
9 I) M+ j' Z! x ]& O6 c
/* 报告通信结果*/
) G+ ]! ?$ O N' ?8 @
if(upp_error_count != 0)
, A- @. \5 j$ z d3 L% p
UARTprintf( "upp_error_count=%d\n",upp_error_count);
' _3 C( w, u8 [$ Y/ g3 s6 f7 m/ {8 o
else
$ Y8 e; r. d4 T O7 r
UARTPuts("uPP transfers complete!\n",-2);
8 A( v8 h' M6 H1 D+ a( z
+ y! `3 q6 L9 k
UARTPuts("Do you want to print all the data?(y/n) ",-2);
" O" `8 t& }8 P. ^3 o5 |2 O
UARTGets(ch,2);
/ |/ A8 {1 J7 [( q# c
UARTPuts("\n", -2);
+ s z' p- B3 w( k: Y( A4 Z& `
6 ^' i0 @* c- G* X8 y+ P0 M- U& ~' }
if(ch[0] == 'y')
# }" s" V4 I% v
{
2 U3 E& P3 m! L- g, J& d* o" M
/*打印全部读到的数据*/
' g! ?: {0 _4 [/ i
for(i=0; i<upp_frame_size; )
- A/ z* s- ^2 D; K Z' T( W
{
8 v7 E1 y2 `) U% v) k
for(j=0; j<5; j++)
7 K: x2 u' A7 O* b+ y
{
/ F7 S8 x8 y1 j/ L. g/ d, E
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
4 v6 D4 k2 Q/ i2 O) s2 [
i++;
4 o" w& R; J4 X2 _' v v$ O
//if(i >= 4096)
& _2 W) e$ i& H2 k& Y
// break;
0 U9 h2 ^; l$ C1 l4 J
) ]% m+ y0 q. s ~) j) m
}
& s; _7 l4 Q" r
UARTPuts("\n",-2);
* B5 r6 k: |3 Z/ C* P
}
- ?) I! H w* ?. p
}
1 l4 Y. {4 H4 Z1 X
0 w" p$ z0 U# k% R
}
5 v1 O1 A# p# N& e/ \. h
& {% @+ w: e6 H& J+ w4 v; E* r: A# i
0 t5 Z# O9 H' ~7 I4 \
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
7 J& S# ]3 g, V" X
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
- X+ c+ S" Z; c3 c# j. w+ v
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4