嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
! e- G, i+ \; Q
Void UPP_TASK(Void)
+ |# q+ q- D6 m& }
{
3 ?' k- ~/ H, {" M5 ~
R7 o7 Q3 _/ |* U5 A. c; k- {
int i,j,k,target_int_count=2;
6 }' @- G8 u2 ]3 d) x! Z/ D% X# c
char ch[2];
- r: C" J i+ N' H6 I+ `: P
% Z8 @% S* T& ]
' y, ?! [# I. [
1 j% [# P6 O" {3 t; a
upp_interrupt_count = 0;
6 s& f. E3 L: p: j( g3 P/ b4 W
upp_error_count = 0;
3 v3 b9 h) {* z0 n/ X
9 F3 g. v6 j- p& H0 C& z
UARTPuts("\tResetting uPP buffers...\r\n",-2);
* P: L4 t9 L# b- h6 K# k
// Initialize data buffers
' t9 A# p7 R: I
for (i = 0; i < upp_frame_size; i++)
) C9 a9 n) I ?6 G6 @
{
& |; G3 p4 o# C! n, \6 A6 ?
upp_buffer_b
=i;
* x! l. N+ i, K" ]% C0 m7 {
upp_buffer_a
= 0xDEAD;
0 J/ }- Z' [) c' _
}
( h6 I! A# A3 v4 J; r9 z
" b' [4 s& A7 f3 r6 A
//for(i=0;i<1024;i++)
: o. n' {8 M# i: y* b4 v7 e
// temp
=0;
' H7 k) [; u1 ^
; w$ m5 t8 ^6 O9 P7 y, Q
//UPPReset();
, b* j# w* F6 { ]4 ? P
/*启动UPP DMA传输*/
. x' |& K; d$ w7 x
UARTPuts("upp_prog_dma_i\n",-2);
1 C4 u# C8 t8 o7 W- P" x) G6 e9 y4 M
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% D F- }& J. O( l
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( _# [8 t8 W; E" P
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
, ?7 _5 U) B' M, O
, D9 y( s2 j# C: Z' t
UARTPuts("upp_prog_dma_i\n",-2);
; J$ v# D7 j* K0 w3 j& }
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
& e) _7 W! u" a8 H% P/ \
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% n# O& _: H/ g4 K- P
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
, }" S5 ]& D( a
% z+ N. N4 A1 d* h) p
/*等待UPP传输完毕*/
( h! k" b4 Y0 Z2 U% M2 `
//i=0;
& i6 |7 D4 m0 F- Y
//j=0;
$ C* n/ S# x# B' n* y: O
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
! M$ j) H- w; c! n& N) n0 ]) B
{
# P+ L5 `, j4 L6 t6 `7 t6 k' F
/* 测试UPP传输的同时操作普通DDR数据
* m9 f3 x4 v3 h2 j7 N" ?
temp
=i;
% x! a+ g( i5 [' f+ r
i++;
( f2 F1 q( _2 h2 L2 E/ P; [
if(i==1024)
# F% s3 }+ }8 m" j* J
{
9 @% O* n2 z1 l+ s P- L5 w
i=0;
. q$ m4 o, o' x1 H
j++;
+ a5 R0 M) S: {; k1 f4 j
}
: E& I& j( h/ W3 X ^6 b! E
*/
( z4 n( @# c! w. F
* C2 ?" p: D' o+ t5 o, f& E" c
asm(" nop");
! P1 O0 U8 O& q4 G3 g) h K4 j
x$ Q2 C1 X! U9 n0 ^ S( L
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
7 L- U) h" h, {7 P! ]& `" ?
}
) F5 K0 V- N- ^0 O" y$ Q& U$ M
9 _( K( p& x6 d- @% R3 ^$ S
/*检查UPP传输的数据是否正确 (loopback modes only)*/
6 e& \! ~; x# ?. Z
//UARTprintf( "i=%d\n",i);
/ u2 v) }7 I! W7 u" _' m8 ^
//UARTprintf( "j=%d\n",j);
$ h% J7 H2 g- V- k* z* T# y
UARTPuts("Data mismatch in buffers.\n",-2);
; D) R3 Z8 J" c! H5 O
if (upp_interrupt_count == 2 && upp_error_count == 0)
8 m* C6 Q& ]) `/ Z4 [
{
, X) `& @( z' k% |8 ^; r8 ~
for (i = 0; i<upp_frame_size; i++)
% [, b# W3 Z/ g/ A9 o
{
$ C: ?$ n, z4 n8 S& h
if (upp_buffer_a
!= upp_buffer_b
)
. j( o8 K: P# l* j0 y% d) q4 J
{
! {7 F) C% ?4 _1 W1 s* c3 w$ Q2 V
upp_error_count++;
$ ?3 {2 m" S1 F- ?, N) s: _3 q
}
) ~# ?; y' f% ?5 O2 M
}
* S' ]9 z5 O; F* q E1 I+ h
}
& v" I7 u. z) k; B
& w9 z+ N) ^) F% ^* y6 ?
/* 报告通信结果*/
& r8 `$ i% } C2 |4 M
if(upp_error_count != 0)
2 j! j9 D2 ^+ W& Y0 c) ?
UARTprintf( "upp_error_count=%d\n",upp_error_count);
; `1 ~7 A- X7 t3 J
else
0 t: h) r: {- q8 W5 L4 {$ a9 q
UARTPuts("uPP transfers complete!\n",-2);
( O: ?2 O+ ?+ q
! N% p( D7 Y) k
UARTPuts("Do you want to print all the data?(y/n) ",-2);
% q* V3 k) m5 \7 u: z6 N' w
UARTGets(ch,2);
/ e+ N5 J; s2 A, ]; L
UARTPuts("\n", -2);
: E9 \% r, N, ]3 W1 j
5 M; i& {- M+ S$ E: V, w' s! a9 W
if(ch[0] == 'y')
E w7 F% R5 [0 I% u* J" c e
{
* M, y ?& F0 f
/*打印全部读到的数据*/
3 Y: w9 ^7 _0 K1 [
for(i=0; i<upp_frame_size; )
4 L0 U) B% c, M6 Z! O
{
5 h; U# e) {$ c- [' ~# x
for(j=0; j<5; j++)
! G0 C! o: R0 C
{
2 n# Z0 o; [' Q& k0 j% @/ f8 W% A: Z
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
1 |4 A* a' a# G) q; {2 |$ O0 y
i++;
1 a' b1 s3 M4 o& H. J$ [7 }
//if(i >= 4096)
3 I4 k4 B4 J9 r' U3 w+ r
// break;
+ H2 i% z" n5 F4 Q: X
8 e) }4 ]9 h3 q
}
) A8 B* i/ }2 g0 \2 o
UARTPuts("\n",-2);
' w7 j8 @/ {9 |2 v/ P, ~
}
v% N3 q, V! V
}
2 _) p$ f! V8 o3 a
7 g+ o% V! o, E1 b& Z5 S
}
2 z- N8 a2 |7 N7 z( a7 L
! @5 _9 i0 }* ~7 ~7 s2 y
) k3 Z; N7 F6 |
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
9 x$ A' ^/ D$ }% l
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
8 o2 s) P: Q: J3 |; o7 s4 B3 g
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4