嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
: a( g; Q# ^5 q% j# m% P
Void UPP_TASK(Void)
$ _& s' ^; t. z3 E+ \( Z3 j) W
{
* Q F. s7 @' @ W3 v- |
5 {+ l# F3 c8 W
int i,j,k,target_int_count=2;
8 O* x1 s6 |+ K4 [/ u# B$ j l
char ch[2];
' k5 I) ~( n/ X1 ~. B L$ g
. [3 i1 Z9 k9 ?7 U5 s
0 c& k3 s8 ?( U2 J5 s/ D
# B; F4 k" m, \. A
upp_interrupt_count = 0;
/ G' C+ U/ w H& j1 W7 O( T
upp_error_count = 0;
% t7 _; }- S4 Q9 x
+ Z3 m. I+ [4 q4 X/ c
UARTPuts("\tResetting uPP buffers...\r\n",-2);
+ W6 x% _( h) E9 l/ r2 l: s
// Initialize data buffers
; t8 q: a$ I+ v( y, c8 `* ]2 s6 z
for (i = 0; i < upp_frame_size; i++)
6 ], x. x' y h& l: e1 t! h2 k
{
: F+ J* I! {( m8 ?2 M) Q
upp_buffer_b
=i;
. S8 J" J$ @, M2 Q! h3 Q
upp_buffer_a
= 0xDEAD;
$ C) T6 a% ]- N
}
x1 @0 B9 N; X: |3 E( K+ \ |+ H
& }2 _! N1 E* L1 b! l n
//for(i=0;i<1024;i++)
, H) \5 `# t, v: ~- _
// temp
=0;
5 K! b# ^1 y9 k2 b9 ^# k v" a
" F2 P5 t1 U* u0 Y a; s
//UPPReset();
: U6 w8 d4 J0 _& j
/*启动UPP DMA传输*/
. T+ B" h: F& Z% V# d; z0 Y# V
UARTPuts("upp_prog_dma_i\n",-2);
# n! J g7 T( x8 y; s
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
6 z6 \$ S- ~) b7 b w
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
. v" W. K9 l, |. H. D: F6 p1 w
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
8 Q1 U p' S% w0 i8 }& u
G" A: j/ I7 b/ b
UARTPuts("upp_prog_dma_i\n",-2);
# v# o3 U' V2 ~4 i0 ]- B/ }
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
3 _0 A2 y4 K; L9 v4 i
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, O. }$ O J9 B& X: C
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
G7 Q) N& E: V6 Y5 S/ L
( ?9 R# B* S; i4 {
/*等待UPP传输完毕*/
/ ^" x. H l7 D7 ^9 P7 s- J
//i=0;
/ T" \) Z1 o. j, y- D- n" d& b; @" e
//j=0;
8 D6 H; N1 ~/ S/ @8 i6 }2 J, L1 o
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* s7 X* A0 {1 ]5 {2 M
{
. D* m$ Q! [4 T. F1 _% ^
/* 测试UPP传输的同时操作普通DDR数据
' V* a3 t( J0 a9 I: c% i2 }1 j' j
temp
=i;
% J V1 B! t+ c5 X- R' F
i++;
* ]& ?$ D5 a6 |' p! V) m! s+ i
if(i==1024)
! Z1 {9 h+ H* z7 p! f
{
' M7 a; C+ x, k/ v
i=0;
# R X+ c" Z$ L4 b& X$ o
j++;
3 |% U+ {9 B$ |) O3 Y# M# J8 x
}
3 @) y X0 V, Z/ B+ h
*/
t7 _! N1 x' P% \
0 U$ C0 t! n! \* m% }, }
asm(" nop");
7 @/ l7 ^' r4 A1 [; J
* H& R* s: M7 F: i3 c' N4 `8 n! L5 F
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
7 ?- B$ I! O* J* T7 t2 T; w o8 u% N
}
4 i `7 o! `" ~6 v' t" E1 p' x" K
9 z$ X6 _8 n% j' ?1 Y" A
/*检查UPP传输的数据是否正确 (loopback modes only)*/
8 b) Y. { j( e8 ~ s+ }4 P
//UARTprintf( "i=%d\n",i);
# `! r5 J8 f) N! z/ m
//UARTprintf( "j=%d\n",j);
- K0 j2 e5 j, W( \( Z
UARTPuts("Data mismatch in buffers.\n",-2);
! n1 w1 N1 g) j& I
if (upp_interrupt_count == 2 && upp_error_count == 0)
$ y" @% U y( e) ?4 ^. Z
{
0 a* ~* h! a0 X G7 ?
for (i = 0; i<upp_frame_size; i++)
. H2 k- C0 I8 A" X9 f6 H8 S* N t2 w
{
% K/ ^: J$ B: V) f" P, w* s
if (upp_buffer_a
!= upp_buffer_b
)
7 ? A! h. A/ m+ K1 [- k }7 d4 R3 Z
{
$ h1 a1 x; y! t3 C
upp_error_count++;
1 L8 z- }, u- B" W
}
& ]2 s+ L- m: a
}
5 j; w' K1 }6 k- g% ^0 f) z; y
}
: W: }+ {# C3 K6 i. i- J3 E0 z* x9 Y e
# x& P6 x) R' R0 H, Y: ?# e" E
/* 报告通信结果*/
5 m" `+ ~! m0 F
if(upp_error_count != 0)
; F ]+ }8 ~0 t% [( Q# u
UARTprintf( "upp_error_count=%d\n",upp_error_count);
1 g3 d/ ^! K! }+ d$ q7 {4 N
else
; F& O9 j+ O3 m) a M
UARTPuts("uPP transfers complete!\n",-2);
/ {5 l. b8 c& e: V( j2 y* F
0 e1 X: j6 T7 b+ b1 m8 P
UARTPuts("Do you want to print all the data?(y/n) ",-2);
$ S0 R8 b M/ p3 P
UARTGets(ch,2);
2 o+ b, v7 P3 R- w/ g% B
UARTPuts("\n", -2);
. e7 i- r X a- I9 v
1 d5 M* [( p! _3 C3 v: g9 P, y
if(ch[0] == 'y')
/ V2 @9 g% ^7 T; c, T, O5 y! }9 V
{
4 ~" M. o i$ v# m( ~3 r) j
/*打印全部读到的数据*/
) k3 H/ h2 U, M/ [3 }; `% Y
for(i=0; i<upp_frame_size; )
4 `9 C: s% Q8 o9 @
{
" @3 H3 v/ C" P0 \9 I# G& l& [; k
for(j=0; j<5; j++)
. k5 `+ \9 G; L- F4 C
{
@" w0 K9 _9 U+ d O$ [0 R( k
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
! M) v6 Z% D0 {
i++;
# \7 g8 d0 W; c
//if(i >= 4096)
) A& E6 r* q6 I, \" R
// break;
* \" E, h) q, N Q5 }/ E7 b* a, J
+ J& l) d5 P# @; o8 @
}
6 { K! ? O T8 m% X k7 W G
UARTPuts("\n",-2);
/ W9 M9 `/ x$ t0 w+ r1 x
}
* u8 ^ v5 o; G
}
. }$ s$ j z$ X4 ], L/ ^
/ b( _8 P9 |3 M1 }( _7 S
}
/ y- J: J F% E( m3 x: H
4 s/ h2 ?; x- ^4 n) a- j) T
2 U, U' ~& v' m. s' e' c
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
. ^; U8 k% y+ }8 m( I
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
* }, A. }/ }7 n/ M% ~
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4