嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
9 K+ a" ]6 ^6 J
Void UPP_TASK(Void)
/ ~# l8 [! z% u; w9 }
{
1 e9 O4 _$ ?) H# j' V4 C/ K, V l
' t" v4 X: l, C' j% f# R4 ]
int i,j,k,target_int_count=2;
% x0 W3 e1 Q# N
char ch[2];
7 Y1 h- f0 k* m3 B
/ j ] T2 ~# ~; ~) A, Z
; s8 ~ b% i9 i1 ], D5 B* k3 g
$ }% l" _- q" ], T; `8 F: ^
upp_interrupt_count = 0;
0 O* g! l% m- T# D3 Z9 P
upp_error_count = 0;
3 ~* o1 z2 ^! j3 h, Z. m3 ]
: K; I7 B" g5 H" C x
UARTPuts("\tResetting uPP buffers...\r\n",-2);
6 H# G/ h4 K- e# p/ ^; ~/ D0 Z
// Initialize data buffers
( C, g) C; N: ^
for (i = 0; i < upp_frame_size; i++)
- a% } x4 P5 h8 @
{
2 X9 Z) p: S: R! {3 y; @
upp_buffer_b
=i;
! J9 v) b9 f, p2 @
upp_buffer_a
= 0xDEAD;
) ?7 S) I2 L2 Q; f
}
* o9 T3 {' |5 s# A) ~7 n2 @* q
. H# h! r, f( W x, ^7 c
//for(i=0;i<1024;i++)
! a0 }4 `# ^$ l+ p
// temp
=0;
; ]$ D7 p& W( ^7 W! }
: i' N# f1 q) b( |# P
//UPPReset();
3 d% R6 h1 s9 B8 L2 ~8 g ?0 q
/*启动UPP DMA传输*/
& k6 v" O0 K7 |! F3 w2 m
UARTPuts("upp_prog_dma_i\n",-2);
# C" K: c( r" t( R: U
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
8 R5 B1 M0 f; s) ~
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- ?! X) E- I5 M* ~# b* G8 [
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
) D( ?) @5 X5 i! ?- e/ f& O
6 Z* g+ T6 D' a% r& Q
UARTPuts("upp_prog_dma_i\n",-2);
8 r ~% X2 Y7 @
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
( g& e2 J0 Z+ c& e, W6 P- L; X. u
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
y K& }0 W; r
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
7 G9 B6 m5 ~1 y' C5 ^7 ]' F
" @" j+ \& Z* r9 f6 z/ s( O* e6 R" L
/*等待UPP传输完毕*/
; v+ U( ~' b; n4 @# i2 w
//i=0;
, ~/ a5 g2 u( w9 H% T) o: f+ D
//j=0;
/ x$ @5 C- @4 x$ g& Z$ h
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
7 A$ H2 T6 m8 E* z0 l8 {( l+ j
{
, F5 ^9 L/ d& x' H8 D
/* 测试UPP传输的同时操作普通DDR数据
1 Y4 W7 a% O' D% S* `& `
temp
=i;
3 A+ l6 S. { y4 F" ?9 I# ^+ I
i++;
- G2 n* J- h5 }7 ^1 ?" {, ?
if(i==1024)
" V0 k8 D! x1 f: ?
{
) D0 d0 W4 b$ ] G% f
i=0;
9 m* I; T* b# V+ l D
j++;
. x9 h: V" o3 c T/ Q- ^
}
1 ^- n+ E3 G. i' x' G
*/
' G$ D1 z, P3 J# }$ Q p+ Q' R; D9 H
& r# Y8 n& E9 K
asm(" nop");
" s& p; i; g1 j1 w
' l2 `; S( j9 g+ D: H- L0 M* P
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
2 [4 {& V2 _% p- P5 I. B, T
}
. c) y( q' g8 ~2 M2 `
9 B3 x. a; s1 o" D
/*检查UPP传输的数据是否正确 (loopback modes only)*/
. G: x- @: e5 a
//UARTprintf( "i=%d\n",i);
D7 P* o* u" Z U, t6 z
//UARTprintf( "j=%d\n",j);
. }( r1 d- n; L0 E3 G Y8 W
UARTPuts("Data mismatch in buffers.\n",-2);
1 ^$ B4 o9 ^; Q5 S4 [: E1 T3 ~
if (upp_interrupt_count == 2 && upp_error_count == 0)
# U. S8 v( |! l+ Y, K# a. |
{
3 b+ f% ^3 M- T+ B, Y
for (i = 0; i<upp_frame_size; i++)
: j9 V/ ?" K% H6 E
{
3 I) w6 o9 ]) V& Q, w7 u D$ u
if (upp_buffer_a
!= upp_buffer_b
)
- x9 i% H, x1 }/ z5 H0 N
{
% z- H0 R5 D- @% _: L. R% v7 }
upp_error_count++;
" w1 ]; }& a# w. F( X, A
}
1 S5 t6 r. k1 { r, V8 c
}
0 N; v# }8 i( S. a9 s4 i' `# D
}
' m1 O9 W; d Q9 ]) ^
! ^5 F S4 p; {& Q; \: ^) J
/* 报告通信结果*/
6 q+ Y4 a. f$ P" ?
if(upp_error_count != 0)
* U4 s+ F# ~# L4 E. u: ]% K
UARTprintf( "upp_error_count=%d\n",upp_error_count);
% @, y: X9 |! ^. P
else
+ a7 u; O5 Z( u+ [9 }( z
UARTPuts("uPP transfers complete!\n",-2);
4 l" V$ ]& u8 d9 ^
. s1 f* C5 m% c w8 x) e, r
UARTPuts("Do you want to print all the data?(y/n) ",-2);
N0 D; M9 z( D4 _4 c% Q, b
UARTGets(ch,2);
( V5 z9 b) m( T0 \0 x! {7 }
UARTPuts("\n", -2);
3 m4 S5 ?5 O( F
* W- M/ P. D+ Y& i
if(ch[0] == 'y')
; s7 @% c% K/ g" \, U5 p( Y+ l
{
- _; b! ^% E# F" H- L- {& j
/*打印全部读到的数据*/
# F+ A7 I$ d1 _- k: B. c/ J8 V9 C
for(i=0; i<upp_frame_size; )
, k7 E- h' G% [4 t, F: F' y
{
$ |0 {* B, R# K% b+ O
for(j=0; j<5; j++)
* _: G6 F& O+ Z. y( |
{
1 c, _- U! M$ |) Y( I0 z: l- j) w+ o
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
a' O- N x Y- {
i++;
7 e o. j: [ f% k
//if(i >= 4096)
6 b2 X/ d/ ~3 h3 @$ C
// break;
9 \. Z- e7 P+ ^) Y
, T! N! t" f. }. V
}
3 C H: {! `2 ^1 n; D8 i
UARTPuts("\n",-2);
2 q: `. i4 D1 S; _, ~: E
}
- T4 }; \7 X) K, c
}
" |0 P1 l" j$ p" G5 L( p' J
3 ^* C a5 [" G9 b3 A% e" k+ T7 k
}
7 t& z8 s! {% L: V7 d: n& F. }
, A8 v8 `8 ^9 Y' a9 C5 l; E* V1 Q: X
. g6 ~5 P- m& i+ ?; B
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
% f+ g7 Y/ v1 k
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
- H9 h' R# q: v
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4