嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
+ Q3 f ^ B" `: @; [
Void UPP_TASK(Void)
) q, ]0 M l6 k7 p# ~
{
5 D$ B7 o# w) L" f, S
1 }2 v$ o9 k* @+ t- P* Z9 `& ~
int i,j,k,target_int_count=2;
" H7 _: Q5 a: A p- I
char ch[2];
- N) M3 ~" F+ N- {& `3 L
8 t+ V; M: N; H; u
- p# ?, ]! y& j, E o) a: z2 w
! C2 K% j2 Y# z) x6 N. l# k
upp_interrupt_count = 0;
( T4 q# a8 g( ^% b4 B% V6 @4 `
upp_error_count = 0;
3 V# K+ a+ X+ C9 ]" k! t1 Q
3 ]0 ^4 ]& z( |( Q6 ]& l
UARTPuts("\tResetting uPP buffers...\r\n",-2);
, ?( b. J) c/ d$ N4 E* `( @
// Initialize data buffers
* F" m: K; D) q
for (i = 0; i < upp_frame_size; i++)
) _) ~0 Y$ B& l7 l1 K2 I, \- @* s
{
" e+ H( B% D" h. W$ f
upp_buffer_b
=i;
* C1 ^+ n7 u5 }
upp_buffer_a
= 0xDEAD;
5 J' C" m: [/ Z1 h$ {
}
" }; @0 f! O' P a$ q$ r
! N) n/ c" n1 F( y
//for(i=0;i<1024;i++)
1 g2 x* d7 z3 ]) _+ R+ G
// temp
=0;
1 g# ?' Y$ V6 V
' J* K" E# E. g/ o, M+ M! N
//UPPReset();
, F. b5 z$ m8 V1 V2 C
/*启动UPP DMA传输*/
0 U% [5 T7 ]" j( j6 Y9 G. u% p8 y6 j
UARTPuts("upp_prog_dma_i\n",-2);
: O. L2 }: \* l# t& F
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
: M3 R" |( {/ x) W8 m' L: i: {
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! B' m! f1 ^+ F% j. {6 u. J
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
, P6 N" e9 F3 K% k0 P' {. T4 V+ T7 ~
. m9 F/ U4 O, [# I" I1 Z
UARTPuts("upp_prog_dma_i\n",-2);
" h1 W m8 s5 C: [; t
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
5 w& S5 v" o3 X0 L9 u
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 Q, u, Z) v# _7 G) D3 A/ p
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
& O3 y, T. B2 s8 x( j
" H0 q2 S: }+ e- V+ G
/*等待UPP传输完毕*/
# `2 s. ]) X3 l d% E6 N
//i=0;
3 |. Z" T% B$ {$ C- S
//j=0;
& l/ e8 m( k; D% D: m
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
0 `$ B- k, C1 q v* S
{
4 q, ^! F6 w3 c$ B4 N& z7 P
/* 测试UPP传输的同时操作普通DDR数据
* e j% x- s# ~- J
temp
=i;
8 M9 _! r e* w3 q& i& m
i++;
3 ?9 j' \( U- ^2 c' e, L# d4 P- `1 z
if(i==1024)
2 O9 h9 ^, B7 M, L9 c E
{
6 M1 K4 o J }
i=0;
/ r8 N: |0 ^: r: M9 b. N: ]3 i
j++;
V4 s5 D; j Q. E. Q" e2 F/ M: f" r
}
0 \0 e7 J' Y4 B: I* @: w
*/
% @' E7 k3 N2 T5 H% I& M; G( I
# ~! w; V# F) \ t! y! G1 m
asm(" nop");
1 Z E8 w; s+ l1 U
4 D8 D3 G( C, }5 v8 E p9 B4 Z
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
k! j: n5 d. d8 F
}
+ |' y6 `! O# l+ N
4 u j+ |! z# U4 C6 E; B
/*检查UPP传输的数据是否正确 (loopback modes only)*/
~! m4 B' h- Y7 R
//UARTprintf( "i=%d\n",i);
. h9 K- S& D/ `% Y8 H3 i
//UARTprintf( "j=%d\n",j);
; q0 {1 r0 p& [9 h3 Q2 y* @ R
UARTPuts("Data mismatch in buffers.\n",-2);
) ]& [7 j: P6 C3 ?0 L! ~
if (upp_interrupt_count == 2 && upp_error_count == 0)
- b0 V% z5 _- J n4 I/ J- }) \6 B3 N
{
6 R' T9 B5 f4 `0 j
for (i = 0; i<upp_frame_size; i++)
( i0 A/ O- ]; H. u2 i( g
{
* Y, L1 X; V* s' h# x+ A( P: B
if (upp_buffer_a
!= upp_buffer_b
)
4 X! k9 W0 S J
{
r0 p# V" p1 N5 x) F# o2 Y- v
upp_error_count++;
/ F7 |7 V" {: x
}
1 {" _& y8 e& ?
}
7 Y6 c2 k8 p: d: C6 G2 a
}
; M* Z& B0 k- y
7 p& S3 b0 Z# w6 n n: ]/ p1 }4 J
/* 报告通信结果*/
0 C: q/ c/ G& i8 z5 U
if(upp_error_count != 0)
, B* T* F ?6 [" m7 N# R0 L5 h
UARTprintf( "upp_error_count=%d\n",upp_error_count);
" B( f; S. f& ^5 E4 J
else
8 P& j% q* X& {# G0 f: X
UARTPuts("uPP transfers complete!\n",-2);
6 d- a- m% R: S2 C- q
9 D3 R3 j4 G j& k% [" d7 `( A6 K
UARTPuts("Do you want to print all the data?(y/n) ",-2);
+ w G$ L9 v8 y3 _
UARTGets(ch,2);
! U* p5 x3 x* d) m q2 s4 e
UARTPuts("\n", -2);
& L# x/ o2 y/ b$ o! Y
* E% T6 a1 y8 t( w0 A$ S' u
if(ch[0] == 'y')
. A% l" _- m4 Z5 c& w7 p6 W' p$ a
{
3 K3 b1 }/ J- l4 f. z( J
/*打印全部读到的数据*/
. i6 z# a {: U. F# ?, X. j
for(i=0; i<upp_frame_size; )
7 y" n- I( L6 U+ L; |8 a( I6 _# n: P: s
{
4 v$ O, a1 I! f9 p
for(j=0; j<5; j++)
5 p( e( \' B2 s# _( R
{
+ [3 {. u) i2 }6 I" j. L( R2 [8 j
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
6 c9 k9 P# K6 B* i; M
i++;
- W6 p/ @8 D* G# X% N* M* S3 g2 O
//if(i >= 4096)
* ^7 ?+ \. s- ^% T4 E( c& z
// break;
, E; {4 \4 Z K) g
+ E0 Q0 c0 Y$ X( Z: K2 m
}
; {* o, [1 D- X/ t
UARTPuts("\n",-2);
" b6 z$ }. r5 @- s& T
}
7 B3 P5 P6 v5 Y' E2 K: N. y
}
3 V7 u+ ]( D$ z" }
' g7 u$ G; a2 ~3 ^- k! _( L9 A
}
3 F3 {: v/ g7 n
$ _) D" \* L+ o+ v, {$ G
8 {$ K- N& D$ i# t# P- B
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
* U8 `7 i: H- f* p6 e+ R. A
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
+ A2 x6 K" j' Q
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4