嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
3 a8 E4 y7 {% D, n5 J
Void UPP_TASK(Void)
: r5 F# e2 b+ {# p) w: B, u" l& B
{
. S# n! g& u* D# z5 C8 H: K8 N* x
/ D, M$ n! E( L+ {1 h3 d
int i,j,k,target_int_count=2;
4 B( a4 o* s9 S" C
char ch[2];
( M3 V4 ^( G5 `! s& K" H
7 J1 c" n( { b3 o3 P2 y% v6 x+ `
+ ]! S! G/ {2 y, K
5 ~$ Y9 i+ R8 k: @
upp_interrupt_count = 0;
3 e. T1 o0 l/ L$ Q
upp_error_count = 0;
6 g5 n( _% k( u4 I/ g; M2 _
/ z- ~. h+ W& R3 D
UARTPuts("\tResetting uPP buffers...\r\n",-2);
! R0 l1 T- C$ n! a) h
// Initialize data buffers
5 o4 D8 T x+ \0 c* ]' K J* S
for (i = 0; i < upp_frame_size; i++)
1 I/ f2 h4 W5 K/ _: Q( r
{
* K) v1 }: [5 u0 [
upp_buffer_b
=i;
- ?* d9 o- e" n4 c8 X" p* e0 ~
upp_buffer_a
= 0xDEAD;
( W4 i1 r9 q) s& E( }1 Y
}
5 E; L; L2 X" D& E4 R) S9 l
* ?, ?: ]3 [6 @( U) q# W
//for(i=0;i<1024;i++)
1 o3 z1 P: b: \
// temp
=0;
' W- m4 i; V3 |9 [6 k' V
4 T% F0 `. [1 b8 @! Z
//UPPReset();
2 i! x: M/ {8 o+ \4 ~1 J
/*启动UPP DMA传输*/
: N. g+ h0 O0 e9 I/ u
UARTPuts("upp_prog_dma_i\n",-2);
. ?$ y6 a7 q$ b) _% N" x4 E0 S
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
# R6 a6 l( c' J V" f
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ N* X1 q6 I0 p1 b% c5 Z" E; H& y, a
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
5 R: e, l6 R! Z
( y: K# ]5 q; N2 M
UARTPuts("upp_prog_dma_i\n",-2);
8 [8 L% f7 K) ~0 J ^7 e# H
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
6 Z4 d% @ P; s* o; I
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# `, i/ y" I9 E; h- Q
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
7 n) V! W- \ y3 Z2 D$ y4 b
: g6 ]8 D4 q5 i. S6 \
/*等待UPP传输完毕*/
/ q) f1 Q9 [4 {$ L
//i=0;
. C' L- r! x3 m$ o
//j=0;
; v( M4 F+ I3 D3 x9 S* [
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
|& S$ X2 k) i# C2 Z' e6 v; a# f9 n& E
{
' p) {: D) |9 c/ J
/* 测试UPP传输的同时操作普通DDR数据
3 ]0 Z% @+ P3 r/ g* n3 _
temp
=i;
9 Z: F+ H- a6 P2 F1 u0 N* X' S: J8 m
i++;
% p5 d( e5 V! p- H0 q6 j" z, }
if(i==1024)
) T! h# ?7 {$ i6 J) D! k
{
/ k/ `2 K& V6 E/ C I
i=0;
* a3 ~* \7 T1 {6 h0 {2 A
j++;
) _) C& L$ A8 S+ s: S1 @
}
3 n8 D; Z* r9 b3 X" B5 |: `
*/
/ o# a0 }! `$ N' \8 ]4 c
7 A6 m4 F3 U! F% m% {
asm(" nop");
( l! k$ w. G2 q( T$ |6 r
) z# l$ Q- l$ r% M
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
. r p' d h2 `; ? K
}
5 Z+ `1 d/ S0 R v" g; P' V
8 p1 q+ v1 B4 |' G
/*检查UPP传输的数据是否正确 (loopback modes only)*/
! {9 J" k& U9 ~8 N' l
//UARTprintf( "i=%d\n",i);
$ [( V7 G# [: N" m' b
//UARTprintf( "j=%d\n",j);
j( e. a6 S5 u) s2 [5 z, A+ w
UARTPuts("Data mismatch in buffers.\n",-2);
2 O+ O F' y1 W" x: \
if (upp_interrupt_count == 2 && upp_error_count == 0)
" J: b2 q: _( p0 F/ g2 L/ B4 u
{
0 Z/ x) p! E7 u8 H6 `! `
for (i = 0; i<upp_frame_size; i++)
, g/ m1 t$ p K
{
+ @, X: v# N* ~6 B$ k. j8 _
if (upp_buffer_a
!= upp_buffer_b
)
" O, n0 ?7 w+ g$ v6 ^
{
0 z# i' C2 p" @% D8 B
upp_error_count++;
E0 ~5 o% @1 c7 u% a/ }" i
}
' P) A! q/ [( l3 B/ c8 `6 q
}
" c; e& u. @. `2 I. C; e
}
) D, D" t$ O+ `& I3 ~
2 w) K- x. ^8 R+ j' A
/* 报告通信结果*/
8 ~5 i6 x; @9 {. O7 m5 F
if(upp_error_count != 0)
5 |" l, P. n( ?
UARTprintf( "upp_error_count=%d\n",upp_error_count);
3 I, _) f0 b) c! r8 W6 j" ]* D
else
) v! h5 c$ q9 D @/ r
UARTPuts("uPP transfers complete!\n",-2);
- |9 @8 Q- d' Y9 D$ V
" o- j, }! c8 O& n
UARTPuts("Do you want to print all the data?(y/n) ",-2);
, D" R4 g1 c- ?1 m" Z9 z
UARTGets(ch,2);
( L/ c3 x# \+ {, X* X# B3 }" |
UARTPuts("\n", -2);
* B9 Y% j- `1 b' u/ B
) p+ h2 u, O: ` R! N
if(ch[0] == 'y')
" n) _! x6 J! l b, r& C9 U8 @
{
& `2 R8 I- m3 O3 D1 U, l+ y2 Y/ L
/*打印全部读到的数据*/
: N( d$ \3 @5 h& I* F' J! I7 c
for(i=0; i<upp_frame_size; )
) K4 I2 C+ h' v* F$ P) R
{
: A/ U2 n6 z6 t' U6 Z. F- q
for(j=0; j<5; j++)
4 j( b j5 g( b" o" |. `& L4 ?3 A) y
{
3 f1 P; r$ ^+ W" h! R: n
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
+ s0 n' _3 A2 P
i++;
1 v- s6 N, f1 u4 p
//if(i >= 4096)
$ o# u: I2 F3 f8 p9 c- W
// break;
7 |# F; y0 w' Z8 u+ g3 L+ u- H) S
" F4 p. w3 S# V
}
4 z/ Q* @, c5 {+ {5 I5 s
UARTPuts("\n",-2);
8 t% u, Y% W! b0 _1 \% ]
}
. _7 R0 N# L3 n& i1 j
}
! q/ Z% V1 h& w$ N$ o1 E% \7 W
% }/ F* Q& N2 R9 [. K
}
, |: @( O; @- m
! X) |7 |+ B1 n' ]4 @/ g0 k& k9 m
9 d* {8 E1 N! s- ?" k1 c q
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
6 u/ t U3 r0 K T c8 u7 r2 n! g
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
4 f- O0 f2 ?9 s& ]# f
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4