嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
9 Y; _1 @9 d* v/ @
Void UPP_TASK(Void)
" _8 N) d# z$ m% E( I# {( \- D
{
5 i2 p4 J7 E( I8 R* [6 `+ L
) R" @( G8 \! ]% U' g3 L4 M) A
int i,j,k,target_int_count=2;
, k* d) R+ x4 M6 X- L' [, g
char ch[2];
) x$ ]6 X! y' A+ |5 \ S
. o. i: J, `7 o/ ~* C% k: K
+ B& M* |: q" `4 d: F& c
4 O! P6 i: ^. W+ X9 R' K
upp_interrupt_count = 0;
6 i: d, g9 I& W/ o* A
upp_error_count = 0;
( S+ f6 S0 w# P( P. Z
H2 `2 |1 A' }3 v# h
UARTPuts("\tResetting uPP buffers...\r\n",-2);
9 Y% G. P/ Q$ p+ j
// Initialize data buffers
3 d( \5 u( ?9 D, a
for (i = 0; i < upp_frame_size; i++)
2 m# O. y2 P8 O* G
{
9 w4 i8 S d! _8 ~
upp_buffer_b
=i;
* ?$ L+ [! _, {8 Z) |$ h+ J5 F& ^# A
upp_buffer_a
= 0xDEAD;
. J" Q5 I9 y) b& P$ c9 |
}
; F# i1 a4 ~3 i
) t% {& V5 L8 v) P8 k. E2 B# h
//for(i=0;i<1024;i++)
4 v7 N) c& ^( X0 W" v. ]9 V
// temp
=0;
0 k7 b# U8 E2 H+ p* t
- D {$ M" _9 P: R6 \ e7 L0 [+ P
//UPPReset();
9 k2 J2 [" F0 ~
/*启动UPP DMA传输*/
7 B: m) p; u5 W
UARTPuts("upp_prog_dma_i\n",-2);
- a) |2 P' u) k+ y+ V' W
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
( _9 O0 n3 t0 Z4 }
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) ]9 f, O* Y5 x
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
: D# u# B* C3 @1 j1 r& y9 i
- r0 ~8 q4 Z l% Z
UARTPuts("upp_prog_dma_i\n",-2);
, B$ \5 H9 Z* C8 K- N! z8 O+ p
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
. f3 U2 A# l J6 m& Q$ v5 D* I5 P
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 B& ~7 Z, w {" O* o5 d5 L. R
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
, @! `# z3 t) a; ~0 S8 [
* w' ~9 k* T/ r# N8 L' U$ }- a
/*等待UPP传输完毕*/
y, {9 J$ c9 }
//i=0;
3 m3 j) O) Y; @" p
//j=0;
% K- q3 j ]3 Z. N% U
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
# M7 N2 K; w3 q
{
1 H! {# C; h5 G) l1 G# e
/* 测试UPP传输的同时操作普通DDR数据
' i( D, [. e0 e: M6 J" C: F
temp
=i;
2 X8 w2 Y5 i+ d0 u
i++;
+ h+ W9 n( k- b! w# X2 D
if(i==1024)
0 z" G+ n- i& Z3 T
{
7 l- y" i, @9 C7 k' \! t- ?
i=0;
; I. d/ I) D- ~. X! J# Y
j++;
% q4 @: z0 ]; H8 Z
}
- y2 f; d" V( ~9 y
*/
8 M6 B2 W4 D" ?* g( o
5 K2 _+ f0 d1 ~! X. @- d
asm(" nop");
" c5 f \5 {, C8 d, s
2 `/ e6 P$ \, s0 n, T" B# ~
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
; s J# i6 v* J) V. F
}
! s, O# T* @% Z- E7 i
0 P9 P; P S. ?9 I0 b
/*检查UPP传输的数据是否正确 (loopback modes only)*/
6 b1 ~- G( L5 _2 p* C7 a- ]
//UARTprintf( "i=%d\n",i);
2 `& S$ k( O9 C+ s) ?
//UARTprintf( "j=%d\n",j);
+ g# ^6 I- x3 I& z, x$ R$ a5 k
UARTPuts("Data mismatch in buffers.\n",-2);
% B; z+ X% ^+ k
if (upp_interrupt_count == 2 && upp_error_count == 0)
* I0 F3 \5 C# G1 U4 {3 `5 j
{
+ Z9 ]: O! p7 I* A
for (i = 0; i<upp_frame_size; i++)
/ ^' \: B: ~+ ?5 T/ B
{
9 E; B( q* H% t8 j( C
if (upp_buffer_a
!= upp_buffer_b
)
& q9 ~& l$ o P O! y0 Y% D5 `
{
/ F% q- D: m( B! f `" n8 l
upp_error_count++;
6 ~" b1 {- g9 m5 e# j. F
}
3 K; l7 t: g" l) M
}
/ }3 U/ S t# Q! L
}
8 E: C1 N; _! F. M
* Y" d: j4 l$ B& ~! a. D
/* 报告通信结果*/
, a, o7 c: C2 {; K: ^: Z0 {
if(upp_error_count != 0)
1 m7 D* P' V9 \5 D" a. v2 F
UARTprintf( "upp_error_count=%d\n",upp_error_count);
' n$ {) H$ u4 } S2 d0 ]* N6 I
else
$ K u [( T9 q2 |5 i. f" a5 ]
UARTPuts("uPP transfers complete!\n",-2);
8 n; S* J& Y" n7 y0 I! a5 K% h
8 z9 n2 u& E8 \6 `
UARTPuts("Do you want to print all the data?(y/n) ",-2);
& J! i! \% `5 F2 X+ P2 J
UARTGets(ch,2);
( p, H' T% ^" `9 T6 ~7 B0 e8 M
UARTPuts("\n", -2);
5 \0 b- }; {( o: N5 K s1 t, q
! x4 ~% d- M% O9 _: b$ j
if(ch[0] == 'y')
8 B. f. O& W5 K( y/ z
{
9 H2 c& p; u1 Q8 n2 M
/*打印全部读到的数据*/
* k1 K" e- h6 T* Z& x
for(i=0; i<upp_frame_size; )
6 n( N V8 A$ U. \( D7 ]
{
4 x4 y# Y0 l3 U4 O
for(j=0; j<5; j++)
! k* `. M* Y; I D# o8 k( v
{
/ ^, e5 C& W7 ]/ W4 l- \$ d. y' R
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
. U* y/ g- M! t: D
i++;
7 L# b8 z7 D' B. @: ]
//if(i >= 4096)
' {2 ^- Z1 t: x) d3 M X6 p
// break;
& c4 @- X% X' ^8 |$ z7 F
1 _3 [2 w2 w* ?5 D1 @
}
/ h2 |& a3 A; _4 {1 [' y$ y1 |
UARTPuts("\n",-2);
) ?$ n+ H, `' D7 F$ b
}
4 r: g5 W4 t4 Z, I7 g
}
% a* r5 @0 e$ ]. j% s
' w4 F$ j$ t6 J
}
, F0 C: D- P' p( ?
9 R, }* U! @) e6 B! K# u* u* G
- f7 B" d( x/ p4 s
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
. z* o6 p5 T% W3 \; x8 A
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
0 U) D3 V* a% m8 ~, E" v q
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4