嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
h! u6 V+ A7 s( O# z) [9 k
Void UPP_TASK(Void)
: e G* K6 |5 w O! `+ i! e: f
{
! U7 M4 J! ~/ A6 C4 ]* Z
9 h/ ^0 H4 o l. |& G, Q: o; r
int i,j,k,target_int_count=2;
* R) f1 ^( N5 o7 [! n
char ch[2];
) F1 c/ j4 D4 R5 Y" @0 X
G* w% X0 n+ E O8 t ~
+ u" `6 W. R+ l7 R+ V* {
/ ]* U3 U5 S6 M0 ^- @
upp_interrupt_count = 0;
+ {. n0 G: N1 A4 E
upp_error_count = 0;
" w# x- `) N7 f7 z3 [ V
/ s0 J! o& u6 v* t' ^
UARTPuts("\tResetting uPP buffers...\r\n",-2);
$ W( a& C# M( H8 C8 v
// Initialize data buffers
" Z% f. C# P" A& Q5 h: o; y
for (i = 0; i < upp_frame_size; i++)
+ X6 E) A) d- e8 x
{
, ?) \& e3 [- a4 |0 B
upp_buffer_b
=i;
5 o/ E6 W, x% ?$ A- _1 N& H
upp_buffer_a
= 0xDEAD;
/ ?4 x& @& Z+ P# T7 e
}
. T6 W. p; ]# m! S- _$ f
% f2 o8 X/ O1 N/ C
//for(i=0;i<1024;i++)
8 c9 \& Q- g P; B7 Q2 S
// temp
=0;
8 e# |) K5 H: \! R( u
$ S% c: I0 S: m8 J- d9 n( X# V
//UPPReset();
' @9 r! q% F- v/ d3 M8 b
/*启动UPP DMA传输*/
+ j) A$ v5 }6 u- w& [# \9 A
UARTPuts("upp_prog_dma_i\n",-2);
4 L6 k. X: x0 E' i o+ k0 ]0 a# R( `
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
# K' ]( m0 }' W& C
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' y7 I* i- @+ T6 j1 O
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
, T2 [4 _! s; r s
$ a! [+ j% _9 T0 F- O1 Q! [9 f- \( t
UARTPuts("upp_prog_dma_i\n",-2);
+ |9 v: f6 Q3 N7 k
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
; s: N/ M0 s5 w" f2 {7 [2 H9 |1 D N
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- q" n3 L7 H- L% G, G7 W: q. c
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
* K: l; ^9 N/ T+ Z
" j- i, Q# C0 d$ L
/*等待UPP传输完毕*/
% D; r. M" N' i- V
//i=0;
' a( s i* k# Q" p! D$ v
//j=0;
7 T' _. T2 \9 d4 \0 ]
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* v5 N& g9 @2 r
{
" o+ D4 q6 b% u/ e0 E' U1 q2 `
/* 测试UPP传输的同时操作普通DDR数据
+ q9 e. C4 T6 S! H6 p1 V
temp
=i;
$ |' W/ E2 T( l' ]; B
i++;
# ^% N9 \' v- g7 r# |. R
if(i==1024)
9 f* y3 H+ \2 y" b
{
Z4 {+ U3 A. @, g
i=0;
+ J! A, G" R" S9 C: U
j++;
f; u9 ^( }: F. k% k
}
5 A% u4 g4 v% j# P1 S# R. Y
*/
' A2 z8 l" U- [4 I4 |4 S5 j
^5 W Q, T! d0 g' [0 R/ r
asm(" nop");
3 m8 a: y7 k; \4 }1 K
+ q" b3 N& y* ^" w% R9 y2 R
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
- t% Q6 s9 w' R# B7 `' _- E
}
( k/ D+ X9 z& p- _
6 l' y; w$ |8 Y* Q
/*检查UPP传输的数据是否正确 (loopback modes only)*/
: k7 R' a9 p) p5 K
//UARTprintf( "i=%d\n",i);
$ P8 A4 d: F4 M" T
//UARTprintf( "j=%d\n",j);
8 t" \% L# m; G" C: c1 n; V. H, V
UARTPuts("Data mismatch in buffers.\n",-2);
5 A' ^1 M+ O! y* r
if (upp_interrupt_count == 2 && upp_error_count == 0)
: k* ^) R$ @4 F8 d
{
k W# B) p. V0 L1 o5 V9 l: v1 z
for (i = 0; i<upp_frame_size; i++)
% y; b) S* F' K% w" W' U
{
3 _+ o& x6 F" p, L$ ]
if (upp_buffer_a
!= upp_buffer_b
)
: D5 O0 G7 [0 b- c8 C& y% M
{
+ _% K' S6 p4 O: R* \# v
upp_error_count++;
, B w4 G, y9 {3 |
}
* F& f7 m/ d( p. F, [+ Z
}
8 J; j: m+ c$ ]" ]8 X! F# P
}
7 R2 W# K+ B% U2 d
/ R) X8 I* n# @3 e8 _) ^0 Q. A
/* 报告通信结果*/
" a4 u, F. M2 Z" L3 \3 S* @
if(upp_error_count != 0)
" z3 l7 K; o3 ~* i; J; m }6 M
UARTprintf( "upp_error_count=%d\n",upp_error_count);
* N& ^7 {7 z8 {9 ^% i
else
: c* \9 k4 @3 Z- r8 q7 l
UARTPuts("uPP transfers complete!\n",-2);
. c0 Z p$ C b$ |& ~
- \% D5 U1 m ^8 N( z: p
UARTPuts("Do you want to print all the data?(y/n) ",-2);
* E& q& ^/ N7 v
UARTGets(ch,2);
/ b' }+ [! Z' O2 o& P+ F
UARTPuts("\n", -2);
0 E$ h' _& z9 v
* Z+ T# B7 \! [. k% Q
if(ch[0] == 'y')
! b4 P/ o* U) j N5 u$ o
{
& S# E" G5 S/ A! d. x+ }$ b5 f# `
/*打印全部读到的数据*/
& m2 u; e Q% a6 `+ ^, r1 J# b
for(i=0; i<upp_frame_size; )
! H" u: N/ r. W% h1 o3 p
{
% l8 Q. \ ^# F
for(j=0; j<5; j++)
; B$ H \& p1 X- j. c9 J
{
y2 a' Y9 a5 L+ s8 S
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
' m7 p- Z! @0 y1 I
i++;
* ~6 `7 |' w N& U' S- y/ H
//if(i >= 4096)
/ `7 F& \- j( s
// break;
/ _7 |( Y& G' W6 T8 j/ ~, a
$ B0 Z, R+ n& [/ z" l
}
2 l0 T' Y7 x! z1 t9 O
UARTPuts("\n",-2);
) u( s7 q9 C1 t" Z% B, L
}
$ ~% c* {6 L. E# `' t" m% [, E
}
6 M5 \9 h3 n& n4 t* ?
) j5 ]# ?; ~3 L8 ~
}
/ V; L- U( W7 K6 c7 x8 Q: G
6 I! k! }3 I4 `6 `+ m* P4 n
. ~( u9 `8 i" x& B: U# \! n# ]0 ^/ N
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
. H. g9 Y; A( l
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
/ r1 c Z3 O* X7 A u
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4