嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
, U r; T5 T6 J' n
Void UPP_TASK(Void)
2 c* G; Q# K4 L5 P
{
1 D4 j- d) k% R5 ~7 I3 D9 a
( b# X* {1 \9 K _. Z
int i,j,k,target_int_count=2;
" k0 {. {. {: Q) T" G
char ch[2];
4 h: u3 N* {) H8 G: z
0 r* v6 A8 G0 J! S
# H) K" m/ E* I4 v. E' H
{5 e% z7 N$ I& ^7 p
upp_interrupt_count = 0;
) ^3 O& v% B7 D9 k, L
upp_error_count = 0;
) B3 `0 r6 t" e* E
4 t, L4 Q( d6 T" g0 y
UARTPuts("\tResetting uPP buffers...\r\n",-2);
R5 y H2 {' A, u6 y- U* {' B& l
// Initialize data buffers
# g$ G" B3 t) ?+ l: e- b v
for (i = 0; i < upp_frame_size; i++)
8 V+ [4 z3 D1 T0 I) T
{
5 [" O+ `- n' X, r, c0 ~
upp_buffer_b
=i;
0 d* Y* I8 Q% d- |, Y- `1 \ V
upp_buffer_a
= 0xDEAD;
) E$ r r8 a0 O+ ~. a; v# E
}
) P& q7 H5 @2 g$ ^5 ]9 ^
( Y8 ~8 e q. ~! i7 b
//for(i=0;i<1024;i++)
1 ?% P7 o/ {2 c1 h" s* }4 k
// temp
=0;
- s, d% u$ {6 j, e+ w
5 s4 y3 |' x/ G
//UPPReset();
% K* [* _( ~8 @. t2 Q5 R |" _
/*启动UPP DMA传输*/
2 ?. V5 _( m" i) l: x6 Z
UARTPuts("upp_prog_dma_i\n",-2);
: i; F" f4 g* ~, `0 }/ }5 ^# O
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
3 _7 |% V# B- e
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 E5 o2 n7 Z, U$ x& {6 b Q
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
8 i& L/ C. w8 X3 `* J) K0 J) N# t1 y" A
. m- }/ R2 F0 n
UARTPuts("upp_prog_dma_i\n",-2);
0 Q6 \; m k) g6 E2 {1 O$ m
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
5 j# X( }, F) }1 }7 O4 l6 i/ T
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, [& v( p7 I9 D3 d+ S8 o
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
( s. Z" u* e& y- |2 a, j
+ H( J4 l; Z o m" I H3 H+ e% O
/*等待UPP传输完毕*/
5 F% ~" Y6 A3 Z; B
//i=0;
( l, D7 R" l( l# n: G8 B; O; y
//j=0;
( r, M9 V9 R: p# \& ^" a- F
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
1 @/ \0 Y" g" W+ o0 J
{
4 k/ T; D+ b2 Z) z8 w' H
/* 测试UPP传输的同时操作普通DDR数据
8 M1 ?9 l e6 T; U$ e
temp
=i;
# M! |! o9 z$ P! w
i++;
0 k y. z) w4 B W- z
if(i==1024)
I9 C1 e8 V) n
{
y' c4 P& B- `$ l: z
i=0;
' k% P2 f1 f* i' \8 _% O! A' f
j++;
4 U/ {# u: E; s. Q
}
4 x% t7 g1 N0 ]
*/
( \4 e1 C) x2 s6 _3 c8 f s6 P X
9 |. L+ u% K" q Q6 M$ W
asm(" nop");
5 L" k- l# `! M: D, O0 g
) L" \; E: F/ J0 P
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
8 a. Y5 }0 N9 W) `: y5 R a
}
+ H( ?" K- e( k) f8 O; v
, c9 W+ F' c! ?" ^
/*检查UPP传输的数据是否正确 (loopback modes only)*/
1 z% d2 @+ Z( l8 J8 Z3 r" u% O# j
//UARTprintf( "i=%d\n",i);
+ i0 g! s3 _( D! r- P$ O# l
//UARTprintf( "j=%d\n",j);
: r" S0 J4 d" e, p% n' Y8 r+ e% j
UARTPuts("Data mismatch in buffers.\n",-2);
M9 @0 e) k4 b8 Z- _" r# C0 S+ G
if (upp_interrupt_count == 2 && upp_error_count == 0)
* |8 u! L7 W: @4 m: l' D, ^7 `
{
4 B6 U' R& Z0 G- G$ W
for (i = 0; i<upp_frame_size; i++)
( M: E' o6 O P7 [
{
. C8 l& W- k/ O: {" ]( d
if (upp_buffer_a
!= upp_buffer_b
)
% q& c4 Q' F8 W
{
8 K" I, S# Z4 E
upp_error_count++;
9 y% W% L9 K# q
}
; L h: T- ~5 q; Q% _4 U) T4 U
}
* n3 b6 _) `( V+ S9 J2 ]: D, B! Q
}
) _/ A7 g1 G7 Z8 X
' l1 F" }0 X4 G, D: F- w
/* 报告通信结果*/
: E ]) c3 v7 `. C
if(upp_error_count != 0)
) M& _+ W+ Q$ u5 O4 j5 i
UARTprintf( "upp_error_count=%d\n",upp_error_count);
- h& Z. Q9 d' O/ a
else
! m- {7 A( ]. [* A3 \/ O* `: V
UARTPuts("uPP transfers complete!\n",-2);
1 r4 f; c6 W/ v: @; x; ~: h O
- V3 A& I' B* T
UARTPuts("Do you want to print all the data?(y/n) ",-2);
4 p/ ^4 u* _! o' ~$ D9 r
UARTGets(ch,2);
" ]% O8 C( P- e2 o3 |% r
UARTPuts("\n", -2);
8 q/ }% U4 \. U$ Y
+ P7 G. b9 A, B# \
if(ch[0] == 'y')
- ]. o/ Y3 H5 Q) x4 u& K, a
{
" ^; S5 I! g o6 {
/*打印全部读到的数据*/
4 t9 b2 c* ?! X5 _0 b& ^
for(i=0; i<upp_frame_size; )
_0 z4 G7 ?/ k2 a
{
; |# Q9 K$ n% j- b
for(j=0; j<5; j++)
5 i: C ~, D! r0 ^2 E: `
{
) J* _3 O6 @, M
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
$ t% d* V9 l2 s* p6 D' |; s9 }8 Q
i++;
' o; c: |/ j" N6 q* a
//if(i >= 4096)
* e! o7 s! R6 i: g: x
// break;
( n2 y3 }6 {" e% b
7 _ T; f5 P( s: m% V/ E/ v
}
. c! D+ T2 P4 n$ V6 h5 X$ O
UARTPuts("\n",-2);
: l0 S9 Q2 w l9 K. r
}
$ p/ a/ N3 {% N- ?( n& h* H& A
}
+ ^2 A. u" T. B' H' e- \: u
" t: ^; d# Q: f7 W4 B: \6 K y6 ]
}
$ ~) v. K/ o% h: Z
- z( Z# ]6 a% y# e' V& g+ W: l# ^
2 b0 h5 T' l- v
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
! d5 F; v# v7 |/ f
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
( g# `* m0 n* o7 ]
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4