嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
+ Q" n$ f7 u6 A7 M
Void UPP_TASK(Void)
* ^4 W! y$ m* H$ t9 |
{
, L5 U; R' ^3 @6 y* G
/ |% W) |+ ]% h! v) O7 Y+ R
int i,j,k,target_int_count=2;
7 V) p3 D) h0 D( M6 Y) f4 b
char ch[2];
: h) u- `- P0 u
! Y, B0 w7 r" [) U( I( A
0 z: \. N7 g D* L2 l7 Q" \
# Y( S. Y1 N. P) {
upp_interrupt_count = 0;
% w+ z1 h* I" ]; ^1 h& b$ ^# ]
upp_error_count = 0;
8 ?8 _8 Q) W2 w; r" q0 k
g2 u3 g5 y3 B$ Z. |8 V
UARTPuts("\tResetting uPP buffers...\r\n",-2);
! u* c- U' A, t m0 ~1 j# F
// Initialize data buffers
; G4 w" x |3 m
for (i = 0; i < upp_frame_size; i++)
( D$ ~2 a2 {' Y7 s J+ L& Z: [9 p
{
$ z* G6 f- @# w4 x4 L
upp_buffer_b
=i;
: I1 {+ ^" \1 b3 L- D
upp_buffer_a
= 0xDEAD;
2 I3 D8 H4 j: j2 r
}
Q+ F7 x/ ]+ e4 \ ^6 [3 J
~$ y) R: c( z: d, P5 T1 K- m
//for(i=0;i<1024;i++)
+ E# m) K1 B& p1 o
// temp
=0;
8 z; L: Y0 i8 l8 X+ M
8 M2 ?/ L3 @0 M ^
//UPPReset();
2 m7 Z# \4 @0 n9 M
/*启动UPP DMA传输*/
5 x2 K) w# l9 R
UARTPuts("upp_prog_dma_i\n",-2);
, R! s! w* ~% C" c4 X
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% M, ? c& y6 L" ]/ W. o' x
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) T1 J- @) z7 q6 |8 [$ l+ B- ~
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
- h* h6 F* v" B; S0 z( q
+ B( T& X W, H M, [6 i* ?/ R }
UARTPuts("upp_prog_dma_i\n",-2);
3 Z& R s" }! a4 ^
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
* c$ D6 l) r1 C1 B' |/ b
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 v$ g% r% [* n$ t7 x) Z3 E
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
. x/ J3 w6 |* ~4 f2 x7 K4 O
8 E/ M/ i' r; P# v6 L6 I; O1 ]
/*等待UPP传输完毕*/
: _9 `) w* S. a
//i=0;
0 a( @: \( q. t* o3 ?
//j=0;
* d: v9 W7 F- q: A
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
. x" q+ I! P: I0 H' l
{
& `- B: N9 Y8 u: c- |6 c! r
/* 测试UPP传输的同时操作普通DDR数据
6 R; ~% o7 k& w8 h
temp
=i;
& }/ Y" h" q+ j; L' S) E0 q% r
i++;
4 }5 J) i: Z, b1 a7 d
if(i==1024)
/ {! b, C% H6 t N+ X
{
9 B/ z8 W0 Y3 ]0 {" ?9 I
i=0;
# N$ S1 X" U3 \
j++;
* f# r! L: m' [: W7 J
}
3 E- W/ p7 G6 W4 e1 }
*/
2 L& x2 {( c& {1 @0 }4 R) |. j
2 L: q9 \, }/ c/ ~* c1 ?
asm(" nop");
* g1 L2 A2 b0 {9 w
: ?$ @: u0 c, }
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
! ]: J- b0 l7 a [7 _6 L
}
% Y+ j( N) E2 M0 i+ O
4 S6 z& U8 k3 P! U" o( e0 @, D
/*检查UPP传输的数据是否正确 (loopback modes only)*/
* W6 I" z3 X7 M
//UARTprintf( "i=%d\n",i);
$ j+ ^) O$ v/ G' R7 i5 x7 A8 J, C
//UARTprintf( "j=%d\n",j);
" {6 D5 Q5 S; E/ {
UARTPuts("Data mismatch in buffers.\n",-2);
3 y) j& s1 K/ K0 B# k/ Z' ]5 y* L
if (upp_interrupt_count == 2 && upp_error_count == 0)
. P# \0 V- {- `! R4 `4 Y! O
{
5 K+ H: L; i7 c" g
for (i = 0; i<upp_frame_size; i++)
7 f; \9 C3 r- I$ S5 h" ~( U
{
: ]: V7 E8 ]* M3 N6 E* b% L0 z7 T
if (upp_buffer_a
!= upp_buffer_b
)
: \9 Y$ ?$ K3 `2 M0 C/ H) Y
{
# Q# M# h+ \- {* `' n
upp_error_count++;
1 o* A8 ]/ N' ^1 |* ~
}
; S! x0 q! n, q; K8 e. R
}
. N* ^3 \5 h1 e# U# ^$ u$ ]: V
}
( n. K, X0 e [2 `1 K+ R7 A
@( [) B$ {2 A3 M. z) B
/* 报告通信结果*/
# [7 i+ b; }) F1 M3 o; _. ?5 h
if(upp_error_count != 0)
4 U5 p3 I4 i/ C; [( {. f6 Z' f
UARTprintf( "upp_error_count=%d\n",upp_error_count);
& T7 _+ C& V* k* c' P) P0 o" f& z) f1 ?
else
# ]$ ]" \. L1 y( ~/ ^0 I& S1 V$ o
UARTPuts("uPP transfers complete!\n",-2);
8 U6 v3 e* n; |/ v
5 l6 X7 u) ~; i" M [& Z2 ~ ?
UARTPuts("Do you want to print all the data?(y/n) ",-2);
1 H# r/ ~- _! z, ^/ z5 p- C, J
UARTGets(ch,2);
1 i% h5 `' T" B7 w6 u
UARTPuts("\n", -2);
1 h2 y( R9 F6 K/ d2 t f; t1 ~
M L3 C1 G \4 C+ s7 `. B
if(ch[0] == 'y')
: z& v/ ?+ A! k: E. u3 u
{
0 h7 u+ e. D4 S
/*打印全部读到的数据*/
/ [! M/ b% V* g, E/ _( g% ~; p
for(i=0; i<upp_frame_size; )
" q+ g. O6 i e; l6 l
{
, t8 c' l& X! z$ r. U, Y6 p
for(j=0; j<5; j++)
- Q; V7 j- h$ u/ G) c5 B+ ]
{
: X+ L8 ` A9 D d
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
. L: x8 |* ?- Q# ?
i++;
' S+ Q$ A. S, E2 u7 s" f, n
//if(i >= 4096)
0 ]4 A; l. O3 `) }) ^4 J: \" {* Z
// break;
; J$ M! D% \5 n" h
! V, r' y7 d; G4 Y0 Q( m
}
( M$ g5 @2 f6 z; M- m* z8 { h
UARTPuts("\n",-2);
( h) L; P; i, E5 N* Q0 J
}
. C" S/ N& }+ k: T
}
" }3 W8 ~6 r* I. \
2 a4 R2 a3 E# q _+ y6 q/ O _
}
( X6 X7 ^* @4 g( w2 H$ w' C
1 l6 j4 k4 k7 k* p5 N8 d/ ~
3 G/ k$ d6 C! W; U% @8 `& c7 `* e0 g
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
! S; b$ F9 f) `4 A( v; g
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
4 h: E% t- W6 {( ~
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4