嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
2 M* H5 o4 V+ ]' I( q) W" |& H1 g, O
Void UPP_TASK(Void)
( c4 M8 `0 A! d
{
% z( T6 d0 T4 g1 g# t+ r9 H6 m
5 j' j8 u& o* a3 M1 J1 ]$ L
int i,j,k,target_int_count=2;
: w* X. I- O! J; x5 ~0 v
char ch[2];
+ P7 O' E# T7 ^; p) {
5 W/ K7 c: X3 F2 `
' W1 O2 `! k- |
% b" T4 o$ |- X% y6 V( ~% [ p7 K" t. M% [
upp_interrupt_count = 0;
2 m9 E9 I1 J, v
upp_error_count = 0;
& g0 Q, j) [/ p
3 p3 A# q* T- f9 G8 j
UARTPuts("\tResetting uPP buffers...\r\n",-2);
/ n4 P* B) [: z' J# h+ U- s
// Initialize data buffers
. A, Y. U3 o, N$ _
for (i = 0; i < upp_frame_size; i++)
- K" H/ i# S2 l% s, y
{
$ k, g: w4 A4 _! X
upp_buffer_b
=i;
5 j5 V+ i n& m8 U( y0 \0 W
upp_buffer_a
= 0xDEAD;
5 Z. c _5 Y5 m' K
}
2 k; G. |, p5 H5 M+ J! ~
7 v7 ?$ Y' F# W1 I" a5 V
//for(i=0;i<1024;i++)
9 u# t* A9 h# |* B. s& q1 |. `" y
// temp
=0;
: G& L0 T. ?# y& g* ] ^
[( f6 t7 b$ x; X6 C/ v1 c
//UPPReset();
3 |9 N |3 m |# L5 d
/*启动UPP DMA传输*/
! l) F" n- P) x, ~) Q6 X- I
UARTPuts("upp_prog_dma_i\n",-2);
* O+ ~6 r" y0 I1 @$ z7 B- y
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
5 H, J* M$ I) i- U. F
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 [6 v$ W3 `9 B, W( Z9 z
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
( K$ |2 L, i, K! x
) o& v2 A! ~, L0 y$ T
UARTPuts("upp_prog_dma_i\n",-2);
$ x5 y1 d3 ~" ?7 C n% t' I
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
$ N! C1 }- d- Z" r1 ]3 \
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ A" t3 n H6 ?9 U; V! k4 d
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
5 j e, a/ v3 T% @2 {
, S+ O+ ~1 p) C% P- }
/*等待UPP传输完毕*/
& {" p. |& h3 ]$ Q
//i=0;
z5 d% g/ d. \8 Y
//j=0;
$ H4 {; I2 X; `1 l9 p5 `7 z
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
) ^* }4 H! }% h
{
& _2 _; H" D2 P! ^( N
/* 测试UPP传输的同时操作普通DDR数据
I+ A. x: Y$ q* P5 [, N
temp
=i;
5 f; f" r7 a# @, O1 Z9 j
i++;
( Z& Y/ X2 O1 C
if(i==1024)
+ L- o" j2 G* Y- N4 m
{
" g* Q+ F* a w$ P& B. X3 ]1 ]
i=0;
- g/ j. i, O7 a0 k4 a+ t% {
j++;
& f# |9 ^ Z+ r# {- B c
}
7 V. r4 ] Y- M! X& d1 _
*/
Z7 V r1 J: q/ q; v) r1 k' k
% q# O; K8 R1 D# Y0 F d* e
asm(" nop");
: f% V, M- Y" n* Y) o, _+ [
9 f+ K6 u& V$ V4 m, ` A+ W# t
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
$ d+ d8 A, B: s4 q
}
% \1 L/ D7 ^9 l; }/ l. v
* u' \; Q! f" Y l: |
/*检查UPP传输的数据是否正确 (loopback modes only)*/
. }3 r! G% Q/ R
//UARTprintf( "i=%d\n",i);
4 r. O9 G! z3 D/ p* o3 s. M
//UARTprintf( "j=%d\n",j);
/ I6 A d8 l" m3 C
UARTPuts("Data mismatch in buffers.\n",-2);
# O9 P t" k% L" g! Y, c, i F
if (upp_interrupt_count == 2 && upp_error_count == 0)
5 M K2 Q4 C+ }- |( I4 w( u! u
{
6 c4 [+ o5 a7 Z* ]3 v9 J. A4 C
for (i = 0; i<upp_frame_size; i++)
, B0 b/ p( C# D8 C
{
1 J$ M# `" @& b2 F" [8 w: c5 f$ Z
if (upp_buffer_a
!= upp_buffer_b
)
1 p0 g$ F1 b& g0 }
{
. y; R% b( [" ?4 K
upp_error_count++;
- m7 x! C9 O: `0 Q
}
# e0 [0 ]- q# \/ Y$ _3 N# B
}
& w$ {' ]4 e4 V, {/ w
}
* h- O5 G6 A# E) e2 x j
% H$ \+ I$ O6 B* C! ^/ n. k4 I$ G
/* 报告通信结果*/
* `/ `; Q+ i, ?
if(upp_error_count != 0)
' W2 \9 C, S1 i& ^+ e: W7 @2 ?
UARTprintf( "upp_error_count=%d\n",upp_error_count);
1 T6 H/ E: a+ E, Q: Q
else
& d" P7 ]5 s; R8 [! X6 K* B
UARTPuts("uPP transfers complete!\n",-2);
v! Y# V# I( z0 ?- Z! f
. ^$ r2 ^- ^& r9 N2 ^( b
UARTPuts("Do you want to print all the data?(y/n) ",-2);
5 G; c k% S2 f
UARTGets(ch,2);
% f& F1 t1 K+ q
UARTPuts("\n", -2);
' {; H h% ]0 l
" e# X0 l# e+ j1 ^" D
if(ch[0] == 'y')
$ l+ H/ j9 K) C6 i0 z. F' c
{
0 p w2 ?! r0 @) d* x7 @
/*打印全部读到的数据*/
$ _3 l% W* i$ J
for(i=0; i<upp_frame_size; )
e: _; \( H7 K+ Z6 t! V* |6 T) h
{
, c" k# y' U1 M( ?; N
for(j=0; j<5; j++)
) Z6 q: H4 [+ C: E: t g4 s
{
* e% s+ d, ]" q( Z9 `
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
0 Z) A3 e% ^' y& D3 W
i++;
( D7 l; f, w8 i% _1 l* B( o
//if(i >= 4096)
# e2 _1 M# O5 x( \
// break;
$ I1 V' J6 m }- Z. A
@; v! `4 @0 M3 @
}
( \5 s3 o) g, F+ j7 f7 P; {
UARTPuts("\n",-2);
L" G# Q2 ^5 b, Q0 E0 W
}
( h6 I" [9 J$ z& X' m
}
0 M4 {; g5 P3 n$ _& N: m! F$ w/ w* h) O# s
' L$ Y3 f4 g/ K6 W, N
}
! E/ A) `2 h0 A9 g m" I+ m4 Q
4 v! C' w8 J- z% i0 V
+ z" y' a8 g; g
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
; `, i9 O3 ~% j$ k
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
7 p; u" M+ N& _3 b- r
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4