嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
+ G0 h" a5 G* K# d
Void UPP_TASK(Void)
/ q7 o" D$ ?0 ?' F0 G
{
8 ^3 G5 p) u. o
: y+ x2 T$ o+ C' G# N% V8 q
int i,j,k,target_int_count=2;
& P' y! I. \" x# L5 a$ ]9 R
char ch[2];
6 Q! o; [8 l9 M1 r: i" W
5 c* | x/ S* R* g
2 W8 g$ n: h% A& p6 h) I
% s# P+ A1 G' J* N6 b2 }
upp_interrupt_count = 0;
! w+ @+ V. H" q2 a$ f. ?. N
upp_error_count = 0;
3 B$ I! m6 |2 Z
" _6 ~/ P- d) S. H5 A( D$ ~3 p
UARTPuts("\tResetting uPP buffers...\r\n",-2);
# l; v7 Z3 |) L' o: J
// Initialize data buffers
. ?7 x3 @. I; H
for (i = 0; i < upp_frame_size; i++)
3 [# \- X% U+ T2 i
{
* v3 J, V4 h% ]9 s1 T
upp_buffer_b
=i;
% [$ w; j& \) \
upp_buffer_a
= 0xDEAD;
9 ~7 r. |8 @ k5 R3 U% B2 |
}
. L( g3 {0 h* w O2 y( h
: C' @3 X$ n' y" ~7 Q
//for(i=0;i<1024;i++)
7 x, r3 h' t9 W4 w* I
// temp
=0;
% x$ ^) ?# u/ i- o1 m+ `$ S, }
5 e3 ~ S$ y" a3 m
//UPPReset();
% J. f- S7 m+ e, o9 T O% Z
/*启动UPP DMA传输*/
R/ m' @, [4 ^! r& e, x% \ A* o7 e R
UARTPuts("upp_prog_dma_i\n",-2);
+ B" N; w0 D A8 s l4 @
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
: F, Y8 d' n1 z- u
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" E* T6 S3 I4 q8 F
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
- ?/ A+ o& b- ~7 Y& W$ V
k9 l( D: R, X7 ?% O4 m' \( j. Y
UARTPuts("upp_prog_dma_i\n",-2);
; G5 _2 Y& {" n, Y x, ?* X
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
4 K3 D0 M( P4 p' f
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! k# Z- f6 ]6 _
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
) w' J& U, c, {% j. g, h
% V( Y( W. Z. X( z3 I
/*等待UPP传输完毕*/
7 `9 b# X6 m4 w+ l8 j# ~
//i=0;
6 x: `, H; m/ \' z" Y
//j=0;
& B2 }3 q8 r$ ?6 C
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* ?7 Y0 v; b* J6 C
{
( h# C9 |9 ?! z: @" }3 T
/* 测试UPP传输的同时操作普通DDR数据
$ I: z+ w1 K: F* k3 w
temp
=i;
" w+ w ^# I4 N
i++;
) |+ ~1 z9 L. H6 b3 l& L) r
if(i==1024)
1 y7 I- I+ H8 T0 c
{
7 i1 g( W/ b$ n3 ]- K" c9 a" W
i=0;
. D% V( z3 U5 O* Z
j++;
' |2 g. J' ^' m* ^; H& u
}
c u8 c( h6 R# [2 ^
*/
; U& ~5 I6 x. ?& t
4 z% Y# X: [3 {& m5 J) [
asm(" nop");
' D3 Z( O ] [7 n; k9 Z: E
2 G4 W0 A% P4 ^8 \- J2 X
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
( u" r" B3 t" h, s: j
}
* f$ C7 E& D5 j1 g8 X: ~' {
+ l" |. y0 b) r c" i9 f
/*检查UPP传输的数据是否正确 (loopback modes only)*/
1 w2 K3 t7 G: {/ K% ~! M" U
//UARTprintf( "i=%d\n",i);
7 F9 t: z* ]5 X* r& E! V9 F. |
//UARTprintf( "j=%d\n",j);
" ]1 X1 w% z3 _) D) }0 ~* n& v
UARTPuts("Data mismatch in buffers.\n",-2);
g, v# z4 S T( S1 f0 A# R c
if (upp_interrupt_count == 2 && upp_error_count == 0)
5 K2 [. t; E3 u# b" p. D% e0 C' i; `
{
: D4 P# h( z1 ]9 s( o/ t K
for (i = 0; i<upp_frame_size; i++)
3 C4 {% x; l0 k; p0 {9 P
{
2 v% C3 I4 L% z& t+ y- z$ M, D* z
if (upp_buffer_a
!= upp_buffer_b
)
! q$ s2 _' F% Z. V
{
( @7 M5 R! x8 V. s8 J4 d! C
upp_error_count++;
# ^/ i- I$ z/ t2 k- w
}
: q# P. I. B2 z6 b9 l! c* q
}
) ]- j$ v) t, r" o" U4 O
}
: G) d7 k/ \: x/ @, ~6 k9 v
2 C6 Z5 v3 ~ g, }7 T' I
/* 报告通信结果*/
2 K% i0 x/ C$ S- Y
if(upp_error_count != 0)
3 i; t- \% q) J; ?7 x, a3 m6 K; s
UARTprintf( "upp_error_count=%d\n",upp_error_count);
( w, O6 u" ~1 A( [( a4 V* r- b
else
) u7 z {7 {" t
UARTPuts("uPP transfers complete!\n",-2);
1 |- [ G; X. B
" G U. X- x1 @$ H% Q
UARTPuts("Do you want to print all the data?(y/n) ",-2);
( {2 O) K- w2 o* j1 |! I
UARTGets(ch,2);
$ p G8 h7 |: N0 ]$ {
UARTPuts("\n", -2);
7 x" u0 b, n$ Y% v/ ^2 W4 U" w
: m" D5 j1 T. x% [
if(ch[0] == 'y')
. F$ |; w$ Q: U$ x6 \
{
/ h: f( h' K+ N ^1 t% P3 C
/*打印全部读到的数据*/
% S1 |4 K- Q) u! c
for(i=0; i<upp_frame_size; )
5 E3 n% i1 V7 t) h* E% c" o
{
! t5 V( b! g" n
for(j=0; j<5; j++)
9 r9 s$ I: [. g+ D# y
{
, V. R7 a) k# b' t3 z2 Q6 G
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
; o) c, Y' j. h" w2 z
i++;
9 L I* H, T& v6 J) m
//if(i >= 4096)
: g/ H0 P" K6 O. u
// break;
# C! t2 f' X* g) e/ r( c: N
# X& ]: s* G4 P* V4 y+ z3 ]
}
3 P! W1 k! J8 D- h
UARTPuts("\n",-2);
9 ]# p& o/ r' R7 `$ s7 v9 X
}
, i9 K0 B0 V) q+ E8 I
}
! e, @0 F( v0 `5 w7 u+ A4 }& R
; P9 ~: C: }, y2 }/ t+ M- T6 T
}
# @/ k- q: @3 Z7 D: A
6 \: \5 ^; |" ]) f
6 [3 H# `0 v, Z! q
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
3 x1 ~! A' C6 c2 \0 d, L" E: [- ~
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
H9 H; n7 [7 \- |: D F
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4