嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- ^7 N* y1 r6 u6 G& x8 L4 R5 Z
Void UPP_TASK(Void)
$ Q4 P$ v ~" \/ \1 Z) O
{
5 B: l k6 L/ ^* P7 M# P; r8 E v% w, i6 c
4 q% s& l0 I/ G+ ^ J& ?
int i,j,k,target_int_count=2;
V5 R8 n- [! Y" ]# \
char ch[2];
+ Q7 R5 V5 g: B9 G. s T% r
1 e5 L* X3 g0 S( h0 v; q( H
1 ~: Z2 q( m, z( m/ Q' a
3 m p8 V/ I4 i& J
upp_interrupt_count = 0;
% e! q7 y) Z/ A6 z1 z
upp_error_count = 0;
! h/ E8 H$ S u6 n& s5 I
- ^: Z9 E- c% R
UARTPuts("\tResetting uPP buffers...\r\n",-2);
0 o" c- {, j" a. y
// Initialize data buffers
8 x$ T% _0 W5 _/ S: i% B/ d
for (i = 0; i < upp_frame_size; i++)
* r* C5 R4 J: f+ I% g4 f' m
{
, b* X! B. b# O0 k# J3 b4 h
upp_buffer_b
=i;
: K5 Q; g: {( X7 J9 x* T. O
upp_buffer_a
= 0xDEAD;
+ N. T8 A( X3 d' u: j
}
- {; V) K, f7 L3 \
X/ _2 N/ }, u- B
//for(i=0;i<1024;i++)
* V* [3 y" \) G3 U9 a0 p
// temp
=0;
; V) T, d( ?$ E h( f
( n% h c2 |' ~. ^# M9 W
//UPPReset();
U$ m, g& ]: Y! V6 y
/*启动UPP DMA传输*/
- e0 q1 i) m7 E* A# h0 N6 m
UARTPuts("upp_prog_dma_i\n",-2);
/ I+ h: A0 i+ Q' m1 x) n7 Q" w
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
7 W4 G% H: \& B0 ^( E- ]* Z
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 \2 q. \) H8 g% D2 x
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
0 [. p4 ~1 ^' {# y( q* R0 c9 k
# {2 k9 Q. |! y! l2 O5 F0 |
UARTPuts("upp_prog_dma_i\n",-2);
0 o. f3 Q& e7 u& M: K
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
, C1 m. R% e3 [. G4 R2 ~) m
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( V! [# J, H, a- n, a7 q
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
+ [3 Y( |7 N9 q% k% N6 j9 Y4 _1 M
0 t0 S, G; Y G# q& i) [
/*等待UPP传输完毕*/
* y" j* I% O. p8 p. i8 u
//i=0;
) H: Z+ [- u1 k7 L- D
//j=0;
9 `$ s2 W! P9 k) _
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
; t! f4 |* ^7 X0 G
{
8 E1 i6 E9 U% Q4 t& _+ b8 o* j
/* 测试UPP传输的同时操作普通DDR数据
T. C' x S; n) E* q$ F
temp
=i;
; |, U1 J8 U+ g8 u( `% \
i++;
6 a' H6 R' u6 ?" z) ~% R" r
if(i==1024)
7 Y; d1 `( T: T y. v/ W# a) g; E
{
: G h/ r; S2 L1 f3 v( ?
i=0;
3 m' ]0 A# c& t5 R8 g
j++;
, P# Y3 R3 \ ^# f4 W, V
}
3 m( Q$ a7 Q" K. Q$ Z
*/
' E* O" @; k9 I2 q
# f; J, j+ ?1 `4 L! J, z7 e! {( l
asm(" nop");
0 g; @( ^+ }# M5 L
, l& X3 r& H E; g8 d) x
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
7 w% ^8 z6 C0 n5 }, s0 y) y
}
; P6 {, n7 y2 _" _% A; T) h/ M
% D7 [ d2 m- }* Y( A9 y
/*检查UPP传输的数据是否正确 (loopback modes only)*/
9 e6 z. j9 \) s, _5 }
//UARTprintf( "i=%d\n",i);
2 O! o) e) Q" G
//UARTprintf( "j=%d\n",j);
9 Y% @' s/ f: S3 b4 c9 d
UARTPuts("Data mismatch in buffers.\n",-2);
+ j4 A, M, S1 i: \3 B- B# \' n
if (upp_interrupt_count == 2 && upp_error_count == 0)
9 N! z$ h) @2 m# }7 A* ~
{
% H1 `) g& h# u
for (i = 0; i<upp_frame_size; i++)
$ _0 K0 l) p% K, e/ Q3 N
{
( }% L% F4 k( ]
if (upp_buffer_a
!= upp_buffer_b
)
# Z; v* k' P2 Z! n. N+ T% }
{
$ ?2 n z" D A
upp_error_count++;
- c0 R+ B. Q4 l( {9 e
}
* `1 _1 i0 o) z4 c9 q# e/ N" a/ u+ E
}
" E' o F" P1 z; N% J: f
}
; i- _ m: m7 y0 L# j' ?. A: z1 c0 S
8 v8 w2 Y0 ~5 @" f
/* 报告通信结果*/
" B. C4 }- g1 a, V- ]
if(upp_error_count != 0)
; v/ W0 g* K$ m4 h: ?
UARTprintf( "upp_error_count=%d\n",upp_error_count);
& ?# V8 ] o, T+ D' e4 S N# s
else
% S* {5 a! C7 P9 q. g
UARTPuts("uPP transfers complete!\n",-2);
% b, j, H: ^* z5 }7 H# v( H
* S# {1 z% h# ~; `( l# v6 l( b
UARTPuts("Do you want to print all the data?(y/n) ",-2);
5 Z# ]2 G8 S- {2 Y4 f/ t
UARTGets(ch,2);
0 x) b8 L. t5 H" j8 a! d. d
UARTPuts("\n", -2);
+ F# v, ]9 S$ {, @0 Y
! U( U& b& O' ]5 p- y$ z' j
if(ch[0] == 'y')
t" S% ?/ T( n' P% ?1 B
{
: S; w k$ g/ w# q* l8 |/ Y0 U6 w
/*打印全部读到的数据*/
' K2 U+ {* s( ~
for(i=0; i<upp_frame_size; )
5 F/ }" W: N) S6 K2 s
{
; H2 @* h3 I/ Z, q5 _
for(j=0; j<5; j++)
9 N t4 S0 [; r! m" x
{
& k; s9 K0 F- d1 _( J$ H
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
& [! {5 F2 g7 Y, M' E" n! P# v2 V
i++;
7 {" H% e4 y" I g& w6 I7 C5 e
//if(i >= 4096)
" w0 v* e" G' t; A. v6 f+ o
// break;
5 r* d5 q* v8 _6 g0 t1 l6 L- @8 b
& x2 m' J& a' [+ Y
}
$ x" J& L: {; s( {4 R4 \) W
UARTPuts("\n",-2);
! F4 n" u$ S2 V+ G) r: A6 R
}
, d6 x& ?5 O- U# [$ F' k
}
. w6 z1 ]1 p& r# _
2 a6 M. c6 N7 |3 C5 [6 D3 G3 |: g5 ~
}
% o1 s8 \: |5 n7 V
# h6 s: b/ F- `) k u
: O* L2 p/ m7 `1 V% ?5 }
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
/ X$ C1 X7 q* n7 @
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
/ J+ c$ w) W5 R( k- F3 y$ P
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4