嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% }2 W7 E$ k% N- u4 {
Void UPP_TASK(Void)
$ X3 l [) ^6 T* e* g/ M7 F' F9 [
{
7 a9 i/ c$ n4 H- m7 p! ^6 O, I' Z
+ n7 A. V) @( \3 H
int i,j,k,target_int_count=2;
* U4 B1 m B6 d9 Q
char ch[2];
/ k4 K$ v5 }+ a& `: M5 }
% e9 l5 H' A3 P; Z5 x* f$ e
# q; C; T( v4 t: J: h' A
5 o5 n2 ]: {# G0 `: O9 S6 }1 _
upp_interrupt_count = 0;
3 I$ D2 ]4 s0 i
upp_error_count = 0;
) d2 j ~, f. J" [' ?( t9 o+ W
9 i3 Y4 F/ L) H4 `
UARTPuts("\tResetting uPP buffers...\r\n",-2);
0 _/ ~6 W, Z8 J) R3 q
// Initialize data buffers
: p, A9 p7 ^6 f6 x$ O: ~
for (i = 0; i < upp_frame_size; i++)
+ { A, q; C; `8 A* s
{
" J1 }- L$ u; ]. C0 L
upp_buffer_b
=i;
x. b1 ]' A, L8 A4 w2 o: E
upp_buffer_a
= 0xDEAD;
$ m! p1 H! S. n% D" E
}
/ O; h+ g+ X! O( Z/ D1 c( ~
4 [% A+ }; C" H
//for(i=0;i<1024;i++)
. W; r9 N3 w; s( o
// temp
=0;
) y* X$ c: `) a- k: N
6 c1 |4 \& x9 U8 n/ x5 H
//UPPReset();
5 s s9 m. ] N$ J3 i* q
/*启动UPP DMA传输*/
2 _& d6 I1 r9 v3 G
UARTPuts("upp_prog_dma_i\n",-2);
3 W6 N, q9 v; D
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
8 o" Y8 J) U/ M% R5 }5 }6 ?, W. q: L
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ T- V; }! M8 n
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
0 Q/ H- R/ |% h' @
1 G8 h& j- ~% m- Y3 _0 {* C
UARTPuts("upp_prog_dma_i\n",-2);
9 n4 X$ G! Y5 i
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
4 D) e" P7 K3 r
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- E1 X! U b* c F' p( M* I8 C1 {5 g
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
$ ?7 w5 ?+ x' Q6 L0 j0 N0 m0 q9 l
; R2 p0 U; m c6 ~0 B+ `
/*等待UPP传输完毕*/
9 M3 a( w9 O1 Y' ^. C- y* _
//i=0;
8 b* g/ B5 v" c7 b) {+ S
//j=0;
7 H! M' q* d# Y( x, m5 B0 H2 V2 r
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
# c7 x7 ^6 c; ]; V9 r1 l c
{
6 L' l, r8 S8 _* J! `- |
/* 测试UPP传输的同时操作普通DDR数据
% I r3 k+ N1 E; x' q3 C9 W# W
temp
=i;
$ \3 F* v7 P! `) I& A
i++;
; ]7 d% c" d$ ?
if(i==1024)
! X- c9 f% ]- n
{
* b* N# R8 I7 @6 a2 W3 H5 N
i=0;
|- n" l* l' W. C
j++;
+ ~7 n8 B. m# s8 c
}
, e3 I& V! D' h6 d/ ~* |+ E
*/
" |, [' i4 |! k
% K g: a4 u2 a5 V, h
asm(" nop");
7 m' A& H* T( B1 a/ L: v8 {
! t+ B7 @, z X, A
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
: l+ @7 E& `3 L* U
}
+ w" G4 j* |8 n' x* x
+ T5 m8 w* E# {2 Y* X
/*检查UPP传输的数据是否正确 (loopback modes only)*/
3 \4 n3 F) a" b
//UARTprintf( "i=%d\n",i);
- f( ~: y1 ?. D9 h
//UARTprintf( "j=%d\n",j);
$ K8 m: Y; Z# M) ^3 v
UARTPuts("Data mismatch in buffers.\n",-2);
2 z' k6 k. ]) B7 F# u8 N2 C. o& t5 @
if (upp_interrupt_count == 2 && upp_error_count == 0)
1 G8 p6 T! Z- F, }* q
{
4 `, }6 U* U4 K4 x
for (i = 0; i<upp_frame_size; i++)
! ?+ e. b4 S0 D- e2 L
{
5 `8 Y" M5 n$ k I% J& n: w
if (upp_buffer_a
!= upp_buffer_b
)
3 o2 x9 \9 @" N: m
{
! |* e U4 Y$ B" q/ Q
upp_error_count++;
! a- Z5 g6 u5 Z
}
0 H+ l l9 [7 `6 G
}
" l2 s5 p1 g: ^8 @
}
& B& m) o0 R6 H1 p5 V" S Y4 K
( L& i6 U7 H& i m/ O
/* 报告通信结果*/
: n `/ e4 Y: o1 w
if(upp_error_count != 0)
! P: k( D' v% g8 w5 f7 h! ?
UARTprintf( "upp_error_count=%d\n",upp_error_count);
4 s8 `$ b8 u5 O7 `3 K, r! H2 Z& @
else
) E+ A8 K* [. F4 u/ z5 w
UARTPuts("uPP transfers complete!\n",-2);
" y! K4 V& m/ R" N5 R
, l. ~9 Z$ q k& ?4 e4 S' I& p* J
UARTPuts("Do you want to print all the data?(y/n) ",-2);
2 M* L7 v i/ ?! {/ O
UARTGets(ch,2);
4 G* t0 B" O: ~9 V4 w
UARTPuts("\n", -2);
$ D) ^# w/ g% G8 @9 @4 ^
0 G: y5 }( a6 i+ Z- |6 R0 q
if(ch[0] == 'y')
. |) i; U8 R2 }
{
4 H6 v; l8 j: j7 L' x
/*打印全部读到的数据*/
; m. H, H& f1 z0 R2 Z
for(i=0; i<upp_frame_size; )
- X2 f- S$ Y u3 c* F2 ^
{
& y. c8 g/ {% \. |. b
for(j=0; j<5; j++)
5 Q6 @. W, i7 m: R4 D5 i
{
9 L7 _' l, |" p
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
p! Z1 q% e# @: x
i++;
$ }& ^/ z* d- k s& @0 K# x! E4 p
//if(i >= 4096)
" a' |. d9 M- G2 z
// break;
- \5 ~% s5 `6 {
" {/ b3 i( q% | I
}
0 ]% P \4 k) M( V( @: z5 R+ K
UARTPuts("\n",-2);
( E) A( a5 a2 [. R, k8 P# J
}
) V3 R# g0 f5 ]7 N2 [' R; B
}
3 [/ T0 }, n/ F. f
8 ], c& D% V+ ]3 K' x% O! g
}
0 y: C$ j- g$ z
) o+ X6 l5 T# |! F# ]; X
' u8 w9 z+ j8 a6 V! n
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
, V8 w; M% f9 I+ t4 J* p5 B
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
. `' U' n1 _3 X( L; S
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4