嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
7 f: S% l1 s, @, n
Void UPP_TASK(Void)
2 ^$ v/ S- ?- V
{
8 K5 o, K4 J* F9 ]' m. _
- P5 Z7 R+ ~; [: ?* J
int i,j,k,target_int_count=2;
" P$ B" l+ ~# n
char ch[2];
4 r A# S0 b8 J0 q9 e% G
: K/ e0 j$ K1 ^! ^! x
9 s) g8 [, L$ o* e* K `7 ^
& J; K8 y. B. L+ A, S+ e. z
upp_interrupt_count = 0;
7 J+ M( W+ h/ n4 m6 p8 }: N3 K$ T
upp_error_count = 0;
6 l; R5 { N/ |" z% d
, A L! q1 G4 l, @3 W- c: k
UARTPuts("\tResetting uPP buffers...\r\n",-2);
3 W7 D+ O3 |6 G( @
// Initialize data buffers
# ^) D7 `8 n; H+ X f( c- {7 ^' p
for (i = 0; i < upp_frame_size; i++)
5 u: K9 F# I7 J- N
{
! Q* c4 r- u8 Z8 ~- d& ~7 }
upp_buffer_b
=i;
! i4 d" f( ^+ k; l* ~8 F
upp_buffer_a
= 0xDEAD;
+ b1 Z. J% ?+ e3 B
}
: A+ B3 d8 `' ]
F8 c, b# ?/ \, [! ~" F! W
//for(i=0;i<1024;i++)
8 O7 l3 ]1 K2 v5 ?
// temp
=0;
0 G# @7 l. r4 T |
; H, U9 L, D/ c2 N' ?; a
//UPPReset();
% I) }: Q ?. G& K+ m
/*启动UPP DMA传输*/
# G Z! M9 }1 M7 V# {. p4 s
UARTPuts("upp_prog_dma_i\n",-2);
7 l" u! M8 `" T; C6 }4 }
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% z% X& n/ c: o% Y
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ l# a, R+ M: t
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
5 }3 G) ?: ^6 k/ k1 [
3 `! y, f- O0 e( u
UARTPuts("upp_prog_dma_i\n",-2);
- Z7 N5 P& v; W g9 A& k, d0 e
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
& V/ l$ l* q( @
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 p7 x/ [& M* ^- f9 W8 A
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
; s7 k: k/ u; T' H: G7 q
7 |4 Q, O% k% ^) i2 `: |0 ~) }% J
/*等待UPP传输完毕*/
0 r/ w4 V4 C. N; t0 E
//i=0;
1 b" Z& r A/ l3 r2 I- O' z9 _
//j=0;
2 S/ U1 Z3 a% X. [- U5 ~+ U& E
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
2 y& h7 n( l" b+ X
{
# D5 h" `, ~8 k# Y
/* 测试UPP传输的同时操作普通DDR数据
+ Q) D+ I# M) H/ m
temp
=i;
/ W1 L; M5 Y3 G2 \
i++;
3 P2 g; w# `* L, o' R
if(i==1024)
/ D8 l& Y8 c8 {- `; ~$ f" _
{
4 ]3 `3 p2 s! T! F6 E
i=0;
$ }. |8 _4 b/ o. N' D% ]+ w2 P
j++;
( ^1 i- d+ P# g" E# X5 S
}
3 {% T8 k( u" o% @4 _
*/
) X' }- Z- C% i* C6 D
% w( S9 u+ b( ?
asm(" nop");
" e+ v* G) k& z. o: X
# E. C2 a p& \4 ~1 g5 e
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
: ^2 v X9 N. C
}
$ N: w; V: M; _/ }$ L
8 a3 k3 K& U% Q) x! f: e
/*检查UPP传输的数据是否正确 (loopback modes only)*/
7 ? k# e1 ?/ @4 v
//UARTprintf( "i=%d\n",i);
# b* X8 {" c8 @) m* s$ T* d
//UARTprintf( "j=%d\n",j);
) K" y3 U; g4 g g4 D8 D
UARTPuts("Data mismatch in buffers.\n",-2);
% Y3 U* J7 V) o5 e" N) @ |5 D P
if (upp_interrupt_count == 2 && upp_error_count == 0)
) {8 N+ m l% _4 j8 b4 a: C& t9 n' b
{
6 D5 A; q7 Y+ E/ l8 t
for (i = 0; i<upp_frame_size; i++)
. H$ M, V: A$ f+ g, B
{
( |( U: w. D0 t7 }' j2 U
if (upp_buffer_a
!= upp_buffer_b
)
* S6 s1 C; k& K' q6 [6 w
{
' g5 s) f' V l1 P! B" e7 l7 ^& a
upp_error_count++;
6 O& P7 T. L7 b) t" j7 i! u% y5 v# x. o
}
' O& }2 _& `. x; q: u2 m; ~
}
. f% e b E( p) v
}
' {# h7 u7 Q G3 v5 d
$ f! d5 R a0 P/ x, T
/* 报告通信结果*/
- D, t- n% I! T( R- T$ \
if(upp_error_count != 0)
' J6 ~: s8 w2 l8 n. p6 G% b! q9 Q
UARTprintf( "upp_error_count=%d\n",upp_error_count);
/ o1 H5 c5 T; x6 \% x' R* ~
else
v8 _1 K: l$ }4 l# Q
UARTPuts("uPP transfers complete!\n",-2);
4 k' G; {, F. J# O8 Q( T
* c+ l, G7 L) q+ ~( ~$ `
UARTPuts("Do you want to print all the data?(y/n) ",-2);
8 V) w( V* ?5 ~+ u3 b0 g' \, M
UARTGets(ch,2);
. d7 l% z2 S# B( J
UARTPuts("\n", -2);
& f1 s, ]7 S1 [% S; N
0 D* [: K' q, K- w3 o& l' J
if(ch[0] == 'y')
: M! g7 e! Z# [; p& I3 G% h! G
{
1 d8 p. m6 u& C2 Z Z$ i. W5 G
/*打印全部读到的数据*/
) E. p: r" G/ Z6 w; y
for(i=0; i<upp_frame_size; )
- t( |. d$ H4 a) O
{
S& ]1 N) m; P- v
for(j=0; j<5; j++)
( e8 A' f3 p) l o( k8 C
{
1 s$ X* S* d# ^2 b8 N
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
& o8 ^- `' \! E7 |! L! n8 S
i++;
& `' W% T* D, ` g( v
//if(i >= 4096)
9 X$ {) `; o8 ?; P- M- b
// break;
& j" Y' g% x( \0 a
, h2 j, ?' S7 B. n! u# V
}
6 N9 H H f! U1 M1 _+ ~9 c2 L
UARTPuts("\n",-2);
, S1 b6 C9 v4 Z& F( J
}
/ G" v/ w j% o' z% v) V, D( p% {
}
# H; c/ |$ v- O) j9 K
4 o8 y( e: n6 b
}
. A1 K, b) [$ Q \6 s2 e
& i4 d" I( M& ` j$ P
/ R$ M, R W, _* t! x
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
8 H' `6 s3 k6 y6 l) K: T
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
, s* e7 T1 P3 Q1 Q
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4