嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
. V. B3 }+ {8 Q( V
Void UPP_TASK(Void)
1 w( T3 H6 S& |7 D; @ Q. e
{
3 K, Z; V: k, v" Q! ]: ~! g; Q
- @* z9 r/ i' i, p* D' H
int i,j,k,target_int_count=2;
p/ Y( Y7 g. [
char ch[2];
$ @/ K3 X7 r$ V2 A3 X! n7 y
y# w5 |5 x; d$ v
) T+ F% ^9 M$ x3 e( j
* k: x* s0 Y( I+ D9 }& x. f8 X
upp_interrupt_count = 0;
3 p4 T" i4 S) ^4 g6 u/ m7 w
upp_error_count = 0;
$ ]' C+ J6 \$ T7 v. x; x2 o& h
1 h- t1 K5 p O3 Z- ]
UARTPuts("\tResetting uPP buffers...\r\n",-2);
2 B& p8 i1 y$ j1 X+ G$ j1 \: U
// Initialize data buffers
0 q: p, Y2 v8 v& n& a
for (i = 0; i < upp_frame_size; i++)
3 E) I- ?. K& R' ~1 s- H P
{
4 G! { b- I5 k" c5 g) ]7 i' t( E
upp_buffer_b
=i;
% o$ F3 t' g& Z$ w: _2 q
upp_buffer_a
= 0xDEAD;
& a( L. V/ N3 c# H& ^
}
2 C, |; a# z! e) d0 M& S1 K$ z9 m
) {( n* S# ~: ^9 I
//for(i=0;i<1024;i++)
2 c' F8 g7 q0 N" F+ G6 w9 C# x4 G
// temp
=0;
9 K. r6 s- }3 B
8 w0 Z/ H1 X/ v
//UPPReset();
! v! f. w! i& D
/*启动UPP DMA传输*/
1 s) U3 J( m3 @5 v' K
UARTPuts("upp_prog_dma_i\n",-2);
, K4 }6 V9 \, {: }
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
) A+ a0 H# K9 p" `# u4 i2 a
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# j; {5 }9 _" u3 X. u* ~$ x
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% Z7 i% b2 l- A
. ?7 g4 M$ w6 V7 n; t, w* T& w
UARTPuts("upp_prog_dma_i\n",-2);
+ A) M- o) ?* a$ p2 S" t3 F
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
' i3 P; G" ?% p/ \% i# E/ R7 _
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ q# y9 s* d, \. |/ i
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
/ _9 J! u. L8 s; L7 U3 t, h
0 J s' O# f% K) A, [. \
/*等待UPP传输完毕*/
0 F9 B2 w4 q& W0 D! ]
//i=0;
( }; ^4 d* Q( H6 n
//j=0;
2 |2 \- [# |6 c
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
) K# D5 R+ E; P& {8 u) |& {
{
+ ^# G; E' V0 P. J
/* 测试UPP传输的同时操作普通DDR数据
( F) A+ A. M+ P7 H- h& c8 k
temp
=i;
, }5 P; ]: o- I( \; Q
i++;
% C2 J, m9 H- k9 v4 D+ R
if(i==1024)
8 @ @/ o; q# v* K; g
{
+ r* x: [; z+ V* Q
i=0;
6 v7 U3 }8 V8 t3 K! j; T) ?
j++;
' X% k9 g, N, t4 L9 X, g. j
}
: Y! r5 R, G7 _4 \* q8 }
*/
/ S% x! P5 s0 j7 k$ |7 t/ u
: A( s: f& a V6 l2 m5 V
asm(" nop");
5 a/ c+ Z3 W- C# a
8 ^5 J2 c6 f. ^4 [6 x, A
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
! P) l! n4 V" R( O- y% d! Z
}
% L; _: |0 F* v, {. W' c
7 p: d2 m) T* o# F% U3 L: l3 v$ S
/*检查UPP传输的数据是否正确 (loopback modes only)*/
) w! z7 }8 l! ?$ u5 A4 ^+ n
//UARTprintf( "i=%d\n",i);
+ k4 D) k/ u8 A+ l$ O+ Q1 T
//UARTprintf( "j=%d\n",j);
: g6 T: ~: }0 A! y$ B1 x$ m4 [ ]
UARTPuts("Data mismatch in buffers.\n",-2);
0 T$ ^" V0 t" @# s/ ^5 e
if (upp_interrupt_count == 2 && upp_error_count == 0)
- g0 H L9 G1 Z* r2 |5 N/ e- x/ k
{
% N& p8 h" q& L0 q F! a6 n) U' e
for (i = 0; i<upp_frame_size; i++)
: E0 Z- [/ o( B* n: i S* T6 Y6 h
{
C2 H" E: T" I% \
if (upp_buffer_a
!= upp_buffer_b
)
# G6 v( E3 A$ D8 R* o
{
4 c' }- ?( ?8 o) c: E% R- r1 w
upp_error_count++;
8 n7 l" l& Z9 Q. q# {3 p- r
}
' ?) S/ c- X- X" Q# i$ M1 j
}
9 |# Y# I. l% V
}
. F% T% v. X2 e# t, e2 `% t& i* j
* c5 o& d% y0 @' V/ H
/* 报告通信结果*/
+ R6 e* i' n) @' C: S6 v
if(upp_error_count != 0)
! M3 f& Z3 y# u, a* F* a; Y1 | X
UARTprintf( "upp_error_count=%d\n",upp_error_count);
$ ]! d. G% f" i3 u" ? J
else
# v. b N# X S
UARTPuts("uPP transfers complete!\n",-2);
6 P7 G/ d+ R4 R8 `
5 X# }" X* P. M8 T8 x2 i$ C" F6 m
UARTPuts("Do you want to print all the data?(y/n) ",-2);
9 } @, n' z0 s& F2 ~; `
UARTGets(ch,2);
2 M* A2 k4 i# g' B' L8 m+ d% \$ _
UARTPuts("\n", -2);
, L6 y( i( C' f. q2 x6 ~
% a: G. m5 \) P7 P
if(ch[0] == 'y')
$ J! f) o" | z) L6 @& O
{
7 k' l- \: \4 |# A1 g3 a$ g I" v
/*打印全部读到的数据*/
0 f! S4 k4 A( ]% Q) p, j( P6 t1 r
for(i=0; i<upp_frame_size; )
0 X: _+ w5 T* K9 E" Z2 w
{
3 h. m; a* A: { s6 F5 [1 {% m7 g
for(j=0; j<5; j++)
# H. b& }7 j% @5 r4 n L
{
$ O, N& i; G* @+ f q( Z
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
) X6 ~0 A, w# Y: N8 e- ?
i++;
, }9 @/ t& z0 k
//if(i >= 4096)
1 Y! J) c; l. \. K. l, X+ ~
// break;
# a1 y" {0 y) q" J9 i( j6 v0 {
' p+ `0 q! d: Y
}
/ c, k! b' j7 o5 n, L( `. b3 K" i
UARTPuts("\n",-2);
6 T1 p2 T' T0 s Y& g0 B
}
* H& f# C+ g% _: L+ r) A, O
}
' H/ l7 \2 w/ W6 n, L3 d
$ h- z- ^- ~# W* s/ X% b" u
}
; W1 u1 @2 `8 Z! V3 g! Z1 v
5 h& D+ \0 j; O4 f+ L1 A
* S7 a( s5 s" L) i, H3 s
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
. U% Y2 k7 e: y
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
* ]0 [, l* u4 I0 s
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4