嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
1 c4 h* F' w6 J# H. C
Void UPP_TASK(Void)
2 C; d4 S3 C4 E9 H# k& @4 @. ~6 L8 B3 y
{
6 w! A8 N3 J3 Z0 X
" r9 q6 {# P5 u# w- o
int i,j,k,target_int_count=2;
# P) o' ^# a8 s% x# x. e
char ch[2];
* n+ D/ Y4 q3 X1 ?# E, o
' V2 H# P7 k; a5 Z- N, t! r
. j8 Q$ \& w6 ]8 w W8 P m
# _0 E- T% x0 X2 ~* S# v
upp_interrupt_count = 0;
& Q3 {6 r* t" a3 F+ x+ }
upp_error_count = 0;
1 B6 ^9 F% M7 E) t |! y& ?
7 d+ x& J& c' t. _8 v
UARTPuts("\tResetting uPP buffers...\r\n",-2);
5 R* g; z; s5 G- `$ t
// Initialize data buffers
+ H9 {" u2 O8 B7 `5 r9 D& t
for (i = 0; i < upp_frame_size; i++)
/ ]% i& g6 `- |0 }
{
: ~3 y, e |4 q; l' c- A5 K& d* u6 l
upp_buffer_b
=i;
. r" T! d$ V& s9 R- l5 C( E
upp_buffer_a
= 0xDEAD;
; J, Y8 X) e! a9 L- P1 M/ X
}
" l3 D; K- D5 M, m( X( u3 y
+ `) W& E) i/ G% b. q
//for(i=0;i<1024;i++)
R: F3 s1 Y- K* V& K$ o
// temp
=0;
. ?- r0 G8 W2 Y
. W$ ~+ v2 G' u$ T V- Q
//UPPReset();
, A3 J2 m. j' ?1 E1 C
/*启动UPP DMA传输*/
8 u" K. u) z, ]# @1 a
UARTPuts("upp_prog_dma_i\n",-2);
& x& n6 {3 X" Z! j
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
& _# j* C% u, F' J# R7 [2 E( M
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, z0 L b$ F$ G; V5 p
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
; S5 H7 g, {7 a6 G, b! \4 h& G
2 A7 X0 e3 }. o
UARTPuts("upp_prog_dma_i\n",-2);
) r a' D) [3 u( m8 B1 j
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
* Y/ e( k5 i" E4 S! p
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 v/ m' _) C: j# a
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
+ C! {4 l1 Z8 Q" e6 q; s( a- k5 e; M
: I% |& X. ^" \, s3 n4 y R
/*等待UPP传输完毕*/
7 f& I R# i) h5 X8 |4 P
//i=0;
% i3 }9 ~5 h% g! s! o$ H" f& n
//j=0;
, M* \4 R; J+ d
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
7 i6 z3 A- E2 |
{
! `" y6 B0 G4 M$ {( K
/* 测试UPP传输的同时操作普通DDR数据
9 L5 h* K# e5 s8 h; g1 V: r
temp
=i;
) w& Z' A* L- ^ F. o/ d z
i++;
7 |- c' z& W3 d. C$ F9 h9 d) [# v
if(i==1024)
! M* K0 _9 F. `; ]* `! d
{
: ?, l/ Q& X* C* u4 b. a
i=0;
0 A% J2 B' }2 |" j8 C8 a
j++;
( y* y7 v1 s3 K+ _
}
/ x2 v2 z( N% d, M7 z% Y
*/
|( q# U# e$ ?& v- ~
" r; E. q6 p3 z, A8 M
asm(" nop");
5 T- j; ^ ~& u2 x
0 K, Z j& _' i- e3 j5 r- E
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
2 V E& V8 o t- }
}
* ~# F* A/ ?' C E. X- M
9 X0 ~% S8 M7 Y! H
/*检查UPP传输的数据是否正确 (loopback modes only)*/
9 `- i! ~) h4 m( x1 M
//UARTprintf( "i=%d\n",i);
! c6 |, L$ l A/ D( r" I
//UARTprintf( "j=%d\n",j);
! d7 V+ Z; a2 k. C+ }3 Q- ^& y/ I! u
UARTPuts("Data mismatch in buffers.\n",-2);
# U4 J$ i+ k4 ?
if (upp_interrupt_count == 2 && upp_error_count == 0)
+ W0 Z+ ]* y! w7 c
{
7 P) D# m6 |; U0 I
for (i = 0; i<upp_frame_size; i++)
3 n% n7 a' t( x V- T6 B& v
{
8 l8 \; u- H$ {
if (upp_buffer_a
!= upp_buffer_b
)
) [5 T# R3 q+ A# z
{
1 A& Z* o ~# c8 n: Z7 b: n2 V' E
upp_error_count++;
- w# j% {9 U3 p9 K' H3 [% R
}
2 k! r0 F, [8 m
}
8 C& ?8 M. }- M3 E4 A; q
}
7 @+ n D" z# h: C) `) E O4 b
) [" L# ^! v2 J. V4 }
/* 报告通信结果*/
& ~) m' I5 Y" F' c9 c4 o
if(upp_error_count != 0)
. B2 P$ o2 l! O8 @; S, {
UARTprintf( "upp_error_count=%d\n",upp_error_count);
: P8 {) P* {* F* m) d
else
1 S( n8 p- f( q
UARTPuts("uPP transfers complete!\n",-2);
* y: j& }2 h) A/ ~3 X, @1 m& ~
0 |# J/ B, o& j' s
UARTPuts("Do you want to print all the data?(y/n) ",-2);
' n6 X, T% j/ N1 }, c* u
UARTGets(ch,2);
J0 _- T* \' A L0 F, @" C8 b9 J! ~
UARTPuts("\n", -2);
: D% o' A" X" J
* U/ @, A; C* r( c' Y4 X, @% n
if(ch[0] == 'y')
( e( \6 |3 x6 a/ ]
{
' q& ^: q& E* V1 ]# F
/*打印全部读到的数据*/
& N1 A4 {% Z- `7 n0 E& G h% m
for(i=0; i<upp_frame_size; )
2 U6 H7 R# M# F( q
{
! P5 Z8 V9 b3 K( |+ L$ {' u- X
for(j=0; j<5; j++)
0 n8 _8 U A! D
{
- t2 v& H, t9 y+ `5 s! W/ y
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
* B4 i. {8 i4 s9 O: m
i++;
7 W3 g8 _& k8 f2 A1 x
//if(i >= 4096)
3 t6 S8 h0 K5 [' ^
// break;
3 B! d: s6 D# |; N$ c- N2 x
, N3 I S# j0 F- ~5 W' n
}
* u; A1 A q1 f) O
UARTPuts("\n",-2);
% F6 U+ T0 G4 R! c+ g; y8 i/ w4 c
}
: F* V1 S0 e$ w+ @! [) @0 Y
}
1 u8 z' |; ~( b% q, {# }
) ~; r i, i4 H* a! j N; C
}
9 `' f: ~4 U# n C0 C; q( i! `
: s. [/ j% O3 O' t
6 E# Y8 F, ?4 j- P; W7 Y
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
; r% O7 u& I) h! O, W
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
0 L, O6 ]- a+ h
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4