嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
( j: c& ?0 ?' ~$ `: ]+ D# k( D
Void UPP_TASK(Void)
* _; P& ?2 A6 J! k1 G% K- ?, c
{
; L- s4 q$ p, F# x% v
. g$ m( b \! e1 m, W1 W6 L+ d
int i,j,k,target_int_count=2;
, ]8 ^( l; v+ f" |' P: N
char ch[2];
5 [) l" F' D2 ?$ i
- |3 ^" d5 F; S/ k6 ]$ X
; `# e; ~4 ?8 S# r* H7 C
, p8 g- n2 C- x9 V8 k* b! a7 `: x
upp_interrupt_count = 0;
& `" a: {# Y' b! |! y
upp_error_count = 0;
. Q. P D' x) g* [+ P: `
3 D6 n v2 g. g5 x9 k2 ?
UARTPuts("\tResetting uPP buffers...\r\n",-2);
6 s! F: o2 n" |3 v: J& y" U
// Initialize data buffers
% i/ I# C9 l2 y( h
for (i = 0; i < upp_frame_size; i++)
5 f* C: d z9 T7 Y% \* r
{
; p; Y7 f$ B) l5 s
upp_buffer_b
=i;
( `% O: a* P6 A) v" v' ~5 E3 e
upp_buffer_a
= 0xDEAD;
4 g+ ^" q3 E3 k/ z. k: G
}
3 e, F5 J( v( q3 V# g3 o- g9 ]
6 F K" U( b$ ~
//for(i=0;i<1024;i++)
/ `/ M+ {2 S) T7 f! i- x; _
// temp
=0;
& ]# H- U% i% u3 @8 a% H
1 g* J( Z) [6 p2 D) ~
//UPPReset();
- m4 s. U1 I4 u
/*启动UPP DMA传输*/
4 ~& N" m) c8 G6 ~
UARTPuts("upp_prog_dma_i\n",-2);
/ Q* `: i C& x+ u. }
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
8 ^8 r k5 K6 r! u
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' }, z; z) l7 Z7 ~% T
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
& j6 n+ a! G& K& E7 D
( m5 F( [* s8 `
UARTPuts("upp_prog_dma_i\n",-2);
( u- m2 d7 N; C' y' z
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
- e4 O, A9 D# ~9 r$ @+ F! r2 z
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 X7 g. ]! x' l0 B# u
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
- Z8 D' q" M" G" a7 b- j
$ L" p* l0 b# s0 k. a/ A
/*等待UPP传输完毕*/
. }& {8 Z% O" U! i8 ]
//i=0;
" i2 k" d+ {) a. Z
//j=0;
% d; O% ]4 v3 g9 J b
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
6 E; {/ ], {3 u+ l4 A: A# ^4 Y
{
) ?7 A" P& h% V+ c
/* 测试UPP传输的同时操作普通DDR数据
( d) S* `, Q! a4 [+ F! }( T3 \
temp
=i;
, W: x% M* w- v6 n! Z: z; g
i++;
% G% f* g& {/ C* ? R* _
if(i==1024)
6 j( t' Q' T! D( w+ s- A
{
# v/ u$ o4 }* J# w) z
i=0;
, [) Z; E4 b1 T J7 p* A4 G4 T; Y9 X
j++;
9 |" \! c& r* e2 _4 [
}
% g( {$ g+ j2 o8 W& j- X2 M4 ]
*/
* {: @ a. W7 A. n$ ]! y
1 Z9 E2 Y4 w$ ?- \4 b
asm(" nop");
% E% ?2 y) U( _# T# I4 V
$ H% { E% B- Z ~% [3 X
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
2 e5 T$ G% ]# M, F
}
7 a0 h- i# k; c
: g# }/ {3 L! [! H* X
/*检查UPP传输的数据是否正确 (loopback modes only)*/
4 w/ b0 r* n6 H) O
//UARTprintf( "i=%d\n",i);
; E7 [- W7 G/ C6 x2 \3 Y5 _
//UARTprintf( "j=%d\n",j);
+ k- |& ]9 v; D( A0 r% |; V
UARTPuts("Data mismatch in buffers.\n",-2);
2 w* g2 x' [, n9 F, x
if (upp_interrupt_count == 2 && upp_error_count == 0)
9 |1 t# O# K, ?! H4 v$ M
{
+ \6 I6 ]) B/ A3 L8 ^
for (i = 0; i<upp_frame_size; i++)
4 _0 l* |" a6 P" q
{
% f& }1 d. _+ |. a; [9 e0 {4 K
if (upp_buffer_a
!= upp_buffer_b
)
; [, I( H7 j5 P; c9 M0 W2 O w
{
. W1 a& E+ G* P& I, L# g7 q. A! S
upp_error_count++;
- m3 Q8 n0 C0 i( b2 h" B0 v% F
}
' l/ r0 t9 t z) p7 N* S
}
$ h0 C: ~7 a% S7 f& D
}
# R7 y4 D" w9 h, ^4 Y% X2 z
9 m$ Y0 l- w% Q2 Q
/* 报告通信结果*/
7 s1 m2 G# ?* Z
if(upp_error_count != 0)
# o1 n7 \0 p6 |/ b+ M# Y
UARTprintf( "upp_error_count=%d\n",upp_error_count);
: A3 u, ~8 q. C* ~7 e) E
else
, @# V0 R3 w$ `5 F
UARTPuts("uPP transfers complete!\n",-2);
% [; b+ `3 ^! x! z
4 M. N- A; X: l5 j: K3 `. x: B
UARTPuts("Do you want to print all the data?(y/n) ",-2);
^/ m' a1 u! P6 f* u j
UARTGets(ch,2);
2 X0 W, [! [1 G8 e! f3 z4 a
UARTPuts("\n", -2);
R# y- F5 d ~1 D0 w9 d: ]) u5 `
5 o7 y( H1 E6 f2 q$ q. c! q) O
if(ch[0] == 'y')
% x& A( M" |# }8 N6 M+ F, \% D( Z
{
8 G% c9 K1 p/ I: v8 `
/*打印全部读到的数据*/
' _2 L8 M' [' } k' O
for(i=0; i<upp_frame_size; )
* m( V" c3 a# P; r
{
* l# V) E. D" i$ d& G
for(j=0; j<5; j++)
* F$ @; I u' F' v
{
: Q. G; L) F' m f7 k0 L& A
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
7 d# E5 \4 Q8 I% ]; }
i++;
' J, A5 R5 c! I+ d ?
//if(i >= 4096)
# @7 Z" d [( q, c2 ^4 r$ r
// break;
0 _" V) W/ v& ~1 \, Q5 _
" X K& z) g# o0 n; |. F: T$ j
}
6 Q3 [8 L* H. C
UARTPuts("\n",-2);
$ ?$ q9 B! K C! j
}
/ k# E& V3 Q( y/ O5 j. n+ }
}
4 @7 [" K1 M; S% w
. u; m8 `' M" S" F
}
4 y9 w% m4 i9 W. p
1 j* t1 i: g4 n) b! u! y$ H
9 J1 O4 i. u0 }6 I6 j! G4 X
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
4 K3 O5 g7 E& B+ v. O+ _
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
0 U( j G! ?! }) N- E- R9 K
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4