嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
4 U* D$ E* V4 |7 F
Void UPP_TASK(Void)
( J9 f ?, V' S$ S' X* ?
{
; ^: n$ `2 T# @+ I8 w+ @
0 [, S- @; B$ ?) @# m' {
int i,j,k,target_int_count=2;
3 w! `3 h0 a6 N+ c3 K& V" v% y% g2 ^
char ch[2];
7 q* V& P# K8 i9 L
w5 T7 G _5 P. B2 L4 _7 m
K, Y- u# y* E* H
5 n$ q4 ~, J7 S" b5 |4 F5 `
upp_interrupt_count = 0;
% k4 O+ F+ S$ d9 H$ ~
upp_error_count = 0;
|* l6 @& U0 h: O
# G3 A" ~) T0 k; Y
UARTPuts("\tResetting uPP buffers...\r\n",-2);
" D* l- X7 t7 I0 w8 g$ ]
// Initialize data buffers
9 u* x6 G. {$ x( \- g' e( j
for (i = 0; i < upp_frame_size; i++)
* [1 `+ d! |+ q' i5 J
{
: ], }+ ~4 D/ z8 u2 T
upp_buffer_b
=i;
% `$ H3 d9 f# L/ p& e" Z6 b
upp_buffer_a
= 0xDEAD;
: D N& V, t$ h5 W+ B& {0 y
}
+ J! k7 w2 M Q: M
* s" L7 g6 `* }) F( y
//for(i=0;i<1024;i++)
- e, @' Z7 X- G2 J+ V/ S- Y
// temp
=0;
3 h8 H; N2 z. j" w/ h& c
" Y0 D) w# M4 m4 A, C* B8 Y* ~3 o
//UPPReset();
8 o/ Q, r/ J: [; g8 f' N( C% M
/*启动UPP DMA传输*/
7 C' {0 Y l2 u% Q, z' y$ ?8 ~2 u
UARTPuts("upp_prog_dma_i\n",-2);
8 X7 M8 x$ j$ u8 h
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
# ?+ F' u7 l) p! {2 f8 L Q! F
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* Z5 ~2 _$ i* N6 I3 f
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
6 q$ }% D; f5 f0 G8 ~* L+ B
* L+ q( @+ E6 r8 V! ]; q
UARTPuts("upp_prog_dma_i\n",-2);
9 s( p% x" f- y9 ]4 `% W
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
$ z* I( W5 o0 J
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 x m8 I/ \' p% `9 ]% _4 [
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
: I2 D0 E. K/ _4 d; `$ p
' J) ]) p$ g! m7 [
/*等待UPP传输完毕*/
; Z6 c+ Q0 m) ~ `
//i=0;
! O, a8 l' R* \) `7 T* `, U
//j=0;
) b( `7 ^9 T, ?) d# U ~
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
8 K! v6 j1 E% I) v
{
4 R) b5 V0 T, T$ i
/* 测试UPP传输的同时操作普通DDR数据
7 r" u1 l5 ?; A% |4 O7 {; J
temp
=i;
5 b6 B8 |7 G2 ]& {% _$ w6 m$ V8 b
i++;
7 Z, }4 O$ J7 i9 x
if(i==1024)
( N1 w Y# h' W: {6 ]
{
- T; ]- L) T: Z p4 [2 H& A
i=0;
) x( g9 s ^' Y) C w
j++;
7 D5 M. v) U7 L3 H
}
7 Q9 f% r+ O& D1 n4 \
*/
W+ t% I4 B9 _, Z2 T1 f* B
' t9 I7 T8 `2 I; I8 I
asm(" nop");
/ E4 W7 C+ l1 ]( Z! u- Y
1 K( C: j7 ] v
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
6 r$ Y* Z% O9 _* w/ X0 U
}
, T/ j4 c* y5 p+ b9 |2 Q6 \
( j q5 E' M$ r' R1 Y$ X
/*检查UPP传输的数据是否正确 (loopback modes only)*/
8 l$ M' D5 g6 a' ~ z
//UARTprintf( "i=%d\n",i);
5 h/ b% a8 i; [+ A: P; P7 W& Y5 O
//UARTprintf( "j=%d\n",j);
8 o6 S& f9 _3 l I: t& t! P# K/ b
UARTPuts("Data mismatch in buffers.\n",-2);
9 z. i6 ^; x6 k: N
if (upp_interrupt_count == 2 && upp_error_count == 0)
; w: X0 `; b: R$ q! D5 g Q
{
" m' c/ O* B( _
for (i = 0; i<upp_frame_size; i++)
7 T0 ]7 q: j/ R, v/ U0 `. z
{
3 ?( D, Y1 {# K5 P) j; R# N
if (upp_buffer_a
!= upp_buffer_b
)
1 n @- C) p# ?& B3 B* E
{
2 J4 [2 e% s* ?4 i& {
upp_error_count++;
4 s' X2 v. I1 Z* v- R0 p. @/ J
}
* A+ O# w3 H( y- B
}
( {/ d7 N7 `, i8 J: t, q! ]" r
}
/ v; ~9 C; m0 A. V$ z
$ q0 W8 G c" [0 I9 W
/* 报告通信结果*/
6 l- e+ c+ a9 ]! q. G p
if(upp_error_count != 0)
4 w" _4 z/ N- Q3 ?
UARTprintf( "upp_error_count=%d\n",upp_error_count);
0 z n( U' Z: A, f; T+ @; U1 t- s4 K
else
, n( {0 ^# u' [2 ]6 B
UARTPuts("uPP transfers complete!\n",-2);
6 H7 W+ t H( T" p: g: d
1 T5 E6 _! f: r6 j
UARTPuts("Do you want to print all the data?(y/n) ",-2);
# Q2 Y( [' {& ?1 V& f# X
UARTGets(ch,2);
) G; U2 [$ Q% g |. ]' v G2 A
UARTPuts("\n", -2);
. d" p# p+ G t+ {/ x
/ Q& S9 Q& a0 u$ E: }
if(ch[0] == 'y')
0 c5 a+ Q# P1 k6 b
{
0 }/ g' \' g3 }& Z9 n& U: F8 q: ^
/*打印全部读到的数据*/
N" y6 E* z" k6 |5 A
for(i=0; i<upp_frame_size; )
/ I* g6 z. e6 l }- b
{
: D7 a( f) J, h) U8 ^
for(j=0; j<5; j++)
( C7 f4 L$ M9 l' \+ ~& E. k
{
0 z8 e1 r% F `8 Y% o9 J
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
5 z# B, B' _9 }6 Z% O
i++;
) [: ^, [; z: Y& W! R( k/ u
//if(i >= 4096)
6 v, L; c6 ^% @! h
// break;
2 \. M& ~! F, o# b4 ?- s5 W) k" S
7 ~7 B1 Z: U* L- d# t& F
}
9 u4 v& V0 S, k$ [
UARTPuts("\n",-2);
; {( Y# c& F# O" ^
}
& [; R, J7 ?: K2 j5 [6 c
}
" l |+ |' V: g
" {/ Y3 l$ T! R. V; v
}
7 F: J0 a0 B( a- [! ~4 `8 _
- Q {4 \% M/ J$ B
8 g9 n, F4 j1 I( {6 P4 L
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
9 A& J, s5 _) n: j! q
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
) W* x+ h7 S8 J' ^
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4