嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
) o: Z" \' A1 @4 s
Void UPP_TASK(Void)
% j2 p% c h# G& Q4 j1 _
{
6 {+ L$ q5 \0 X! y# s# ^% C
" W3 i+ f. r4 }
int i,j,k,target_int_count=2;
) l7 e& K1 h6 }2 x
char ch[2];
' a0 ?- X, ~! l/ [ Y
X, y, U8 k! ? p1 l
4 q4 J/ w# Q3 G* V
$ }8 O( _' M7 z5 V5 L, w
upp_interrupt_count = 0;
! w A F3 x7 \4 s% P8 C
upp_error_count = 0;
8 u& \* o5 l$ m: @0 g
2 L% U7 R' n" a# ^# d; F
UARTPuts("\tResetting uPP buffers...\r\n",-2);
) R" p* L. J) i6 G4 Y8 j" G
// Initialize data buffers
7 Z3 u) v, a% E1 m+ F9 r( ^ V
for (i = 0; i < upp_frame_size; i++)
[- b3 c, A) t5 ?; V. N
{
: F3 R4 S- Q. @9 t
upp_buffer_b
=i;
+ @' R x- h. S$ M D* o- j/ Y
upp_buffer_a
= 0xDEAD;
; a! t! ?5 H: {% ^
}
$ E2 R: x! `+ n9 n/ i$ t: @4 G
& B1 x: _6 u* Z. c+ [, z
//for(i=0;i<1024;i++)
2 x0 J8 v6 w2 g/ d( U" A( w- [4 ?
// temp
=0;
) D: z& p% Z/ [+ |7 c O
+ N, Q# H/ T1 g- `! J! }
//UPPReset();
# d+ B8 r8 i& O/ Y+ A
/*启动UPP DMA传输*/
" o6 F( q$ y& ~3 a: S& V
UARTPuts("upp_prog_dma_i\n",-2);
5 x: D6 e& w% g1 x3 F
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
1 |7 e4 B$ t5 C$ `
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 C0 H: \+ I1 z0 c3 i
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
. C. Z4 a: K1 w5 t% p
% N8 C" S/ o1 R3 ^+ x3 U0 q3 i
UARTPuts("upp_prog_dma_i\n",-2);
: ]0 e/ e. F. c5 ~5 M3 [+ `
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
1 O; e# e* \9 Q2 k3 g' S
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% G+ {5 M: t ^7 R# t ?
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
3 f K& W7 \( p0 C6 Z4 S" U
8 N4 B e1 |# A, W
/*等待UPP传输完毕*/
9 V* j( [, U- X- x4 P, m
//i=0;
: D0 d, c6 c ^& Q' K2 v
//j=0;
4 S* B; J3 c# F+ _! d" C
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
3 }/ M5 }) _. a+ J3 a
{
2 r& { Z; y! j& ~; d
/* 测试UPP传输的同时操作普通DDR数据
! S- d9 B, Y9 \, \: V$ |
temp
=i;
* ~2 m% o3 m& `/ s) y8 F
i++;
- Q+ r$ Y. m# i$ p/ f
if(i==1024)
- ^, ?/ z6 z1 _( c! X' Z! C
{
/ ]1 x. ?1 f) g3 |9 w* Q% T
i=0;
3 j1 m( I; d. m0 q
j++;
J0 X; R- b' V; R/ y
}
( z4 z. ~* O3 z; l4 ^2 h% u8 u4 u
*/
. a8 }. a% ~6 z: P& E' n
4 v1 y! q! R3 n- |# K1 r
asm(" nop");
( C5 f( v& |+ h
J% |) ]4 l1 e( S
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
, t' w7 H, @5 R4 w7 N
}
" O, n( X& G( C/ J, K% ?9 ^+ f+ ?
! a8 L/ G! g4 N7 o1 @) g
/*检查UPP传输的数据是否正确 (loopback modes only)*/
0 C# q, m0 Y1 B+ S* _ a# y
//UARTprintf( "i=%d\n",i);
( q) U$ s$ n' E' g! |
//UARTprintf( "j=%d\n",j);
7 V- \4 U, }; E' }2 w
UARTPuts("Data mismatch in buffers.\n",-2);
8 E( p8 d0 U: z( j9 C6 w0 R5 B2 h
if (upp_interrupt_count == 2 && upp_error_count == 0)
u/ L8 X. e4 N! p/ u+ `! e0 x. q
{
9 n/ t) J/ _4 s
for (i = 0; i<upp_frame_size; i++)
, `; M# s, w5 E1 s! ]/ y @
{
" b7 N2 V- c( o; d7 |
if (upp_buffer_a
!= upp_buffer_b
)
/ f! X6 @+ ?! B: A
{
& F' e; j0 g$ C$ q
upp_error_count++;
' n* u% [( [5 r: Z5 s4 k1 a
}
$ K$ t" I G5 ~( a# W: |
}
+ F5 k" u4 v D( {
}
" j7 c X+ ^3 s; N7 m0 P5 s( D
) g( p4 @5 ~/ }7 `' _+ x+ x
/* 报告通信结果*/
; r; X( q1 H: z( S- x, \+ V
if(upp_error_count != 0)
0 p* h* k7 q5 B* q7 f0 n
UARTprintf( "upp_error_count=%d\n",upp_error_count);
5 U- E$ n/ }8 l3 ~. b# {
else
Z+ {+ _6 c) T: d: @1 c
UARTPuts("uPP transfers complete!\n",-2);
$ t& b2 S/ F" M2 I j7 P/ r
! q4 E" ]8 ?6 P' q5 p0 k
UARTPuts("Do you want to print all the data?(y/n) ",-2);
0 }: i, M# m, T
UARTGets(ch,2);
: ^! W5 ^2 @$ r* c
UARTPuts("\n", -2);
% O8 S7 y) W1 g" m6 y
/ K4 p$ \' ]. T7 O
if(ch[0] == 'y')
& k( t. I) [; ^- e2 c
{
& i2 ~2 Z0 v. w* I1 v u: x
/*打印全部读到的数据*/
2 l; f/ Q4 n! [; I8 j$ j/ J
for(i=0; i<upp_frame_size; )
9 T& x( Q+ p/ ~" ?
{
, D$ Z5 G! S6 L2 Y1 e
for(j=0; j<5; j++)
% f7 ^+ f* {( p8 n( G
{
1 {' s# E L" P9 ? `9 p; D' `
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
& H( s* U5 f2 }
i++;
8 q$ m2 O9 W, H
//if(i >= 4096)
: L# s U n/ M5 F( Q/ u) ^
// break;
8 _3 W- W" X, a+ w" s
& h* ^4 y+ v, W6 |9 b2 v. r- ^
}
8 p& E8 r9 A+ f4 X- w- K$ b
UARTPuts("\n",-2);
t+ I( e! V( h( o( L4 }
}
+ b5 M# d2 N0 v: G' }- M
}
% O1 ]' b) [1 B7 K; ^1 ?3 z
5 K4 E) p% p% r, {4 Z
}
$ @/ m; q% B: @2 ~
0 X% d+ B% w# ]5 t- T# b. J, T
3 ~0 }* R# J1 V' E) O0 A I
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
O; j: A2 m' V5 @: m
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
1 I$ y+ X1 n4 O6 {# W/ W# a2 \
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4