嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
" t) d" r, @3 _2 ?; a. P
Void UPP_TASK(Void)
9 `- j( y8 C. h# H! r1 V f
{
7 D- F& j% { J7 n( B6 z& J
' b8 ~$ f! q4 T6 d. p4 k4 S
int i,j,k,target_int_count=2;
2 o3 [/ o9 v* A# Y
char ch[2];
# m" e0 L/ U& C B: l
% }! {6 C% k1 |: T/ I
5 T" E2 U8 I! c9 C# a! Y7 X- a' S
0 z( U! a3 x& O9 i) s
upp_interrupt_count = 0;
- |$ }2 Y; ^8 A# f- r" C' E$ Q
upp_error_count = 0;
+ l4 e8 N" x5 r' H7 ?
% t! n# l& X- M
UARTPuts("\tResetting uPP buffers...\r\n",-2);
" {7 Z3 B* u; i
// Initialize data buffers
6 c1 \! U5 b/ ~; N2 Z; L
for (i = 0; i < upp_frame_size; i++)
" n0 j" M+ `# p
{
$ G: {# B4 k' ?% x- r( e2 I. b
upp_buffer_b
=i;
8 N3 R7 x3 L( r: K! N% p R, z
upp_buffer_a
= 0xDEAD;
) ?: X+ x2 c5 }. e( r( A# N
}
7 k& p# X& v; e2 b* _! _* c! r
- N& x% Z0 }7 A( D% r0 E' P
//for(i=0;i<1024;i++)
. d a9 n- j5 a, k$ O: Q1 U6 G3 U/ B
// temp
=0;
1 M' m n4 q4 J
4 B: P. v# } a7 l, ]7 g
//UPPReset();
" k o" E/ k5 ~# D/ _; i
/*启动UPP DMA传输*/
2 r% X# x4 i) \6 F4 c' ~( X
UARTPuts("upp_prog_dma_i\n",-2);
1 S1 P8 S+ f2 N
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
8 r5 {4 z4 P$ u t' G8 D
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 S2 s. o$ c; i- _- w1 B
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
- _- Y4 i! Q+ V! r4 @
8 W0 }- V% S) D
UARTPuts("upp_prog_dma_i\n",-2);
6 D) T5 O# F9 j
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
! P3 V8 L4 D- w Q" E/ s
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
. e& j+ |8 M0 ]" f
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
* z$ f7 Q2 {; r2 H [# C: `3 @! ~
: p( W4 U# P% ?" C
/*等待UPP传输完毕*/
5 a" |9 E2 d( T2 s
//i=0;
J$ Q1 ~# P. f+ H8 `; U" M; o
//j=0;
) }8 L% i/ H) G% z9 W
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
+ x! V' S9 E! Z5 y2 A8 [) V+ C
{
+ K0 U, R( @9 t7 [/ g+ V+ o5 E
/* 测试UPP传输的同时操作普通DDR数据
, S+ O0 T! N5 [/ R
temp
=i;
) i2 C& p% Z8 ]
i++;
0 r* y8 l7 x, O. X3 V% J; a! G
if(i==1024)
0 ~' l# l& B" J8 f
{
# F7 P0 u* n9 j2 v
i=0;
( r9 v# W' N% i6 I6 O
j++;
6 K! G- ~ |3 x! E' }+ r
}
5 J, J7 [* M; j0 G, Y& [
*/
& j7 w$ U( f; C8 f( H+ H
' F0 M; A L, C# p1 `( B0 w
asm(" nop");
# ~+ T, f# @5 H: k
/ w& g. ^: {$ H6 a
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
. S7 U3 m$ X8 ?* }& D1 H
}
1 n0 p# c* g/ a+ |; d. M
9 K: _8 N) ~" |/ o5 Q$ z/ K# J
/*检查UPP传输的数据是否正确 (loopback modes only)*/
7 [' o: {' [2 s: \- i% X& s
//UARTprintf( "i=%d\n",i);
0 M6 h! ?. i7 r: n
//UARTprintf( "j=%d\n",j);
: ?1 X8 m8 x0 ]
UARTPuts("Data mismatch in buffers.\n",-2);
$ g6 }+ R! f% Y: q% q
if (upp_interrupt_count == 2 && upp_error_count == 0)
/ J4 v+ O1 ~8 Q0 E
{
2 K5 z& z5 y2 q, Q: k9 x; q
for (i = 0; i<upp_frame_size; i++)
' ^! Y: u) t) M- P7 ^/ A8 C
{
) R. _8 A: P* C1 {* e/ k$ F8 z
if (upp_buffer_a
!= upp_buffer_b
)
8 A; P" y! L7 @- \3 p
{
( Z6 z+ N+ K: X, z7 ]
upp_error_count++;
' g4 Z7 s) G& J7 U, N
}
- a- B: G$ k: d4 o1 S6 [' o
}
) e) `/ ]$ O6 j9 u4 B* v
}
- F3 a0 B5 M6 i9 A6 ~. M s
/ z+ l: Q) r: h: S
/* 报告通信结果*/
0 ^0 K i, R9 E) {8 S4 m
if(upp_error_count != 0)
. e+ o2 T% b; @
UARTprintf( "upp_error_count=%d\n",upp_error_count);
; g# u$ D; W6 J! V3 |* J
else
; C+ }, T! T; C4 i2 `
UARTPuts("uPP transfers complete!\n",-2);
; ]6 x* o: t$ w" Q, i! t
I: o5 ?( {% d( j; Z
UARTPuts("Do you want to print all the data?(y/n) ",-2);
& e4 Y' Z* n) N
UARTGets(ch,2);
0 L" X; G3 x( o$ o
UARTPuts("\n", -2);
. q$ C0 O4 y# q( W# y) E7 N
( t6 L8 \, l% M0 E( d
if(ch[0] == 'y')
1 U) H* s- M8 k4 t
{
0 d. z2 F9 j' C- z
/*打印全部读到的数据*/
+ e0 \ K4 ^4 x( A1 D0 h G
for(i=0; i<upp_frame_size; )
6 z5 S& |+ X- m; ^; N. E* Z
{
# D$ L2 t( V) A
for(j=0; j<5; j++)
5 s% C M4 d& r* T
{
3 ~, U: _) o# [
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
7 E) a8 p2 d) N; t' e( F) U
i++;
& L8 @4 C/ [& L- Q
//if(i >= 4096)
7 f8 d! i5 a0 l: r0 w
// break;
: e' u5 I( \- Z5 m, K1 Y3 [
" R: C- S& y8 `: H7 a& a
}
; v% j y S2 u, @% f
UARTPuts("\n",-2);
/ x6 a, K) \3 q/ }$ _! M/ n$ c
}
, ^- i" C D: c) W6 T' {' r2 F
}
3 l& B, \, q. K3 N- [
2 F D' o+ u2 p/ T& H7 `$ H
}
% a2 S6 p! K* l% Y' d
! e- W& t: d: Y) E! B8 Y2 U
# Q( g4 \9 {3 \8 ^8 B
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
1 S3 o( x5 |% E8 B9 _) l5 q
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
& |2 r+ R) k' }6 c0 F( F* c8 u
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4