嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
, i# ^0 n! S5 R/ F
Void UPP_TASK(Void)
# [+ W6 W/ `5 u, Y7 U5 l0 L8 @: z
{
+ i9 ]: U9 N; S* ^# `# p. `2 s( k
7 }! C! e$ Z! M6 n
int i,j,k,target_int_count=2;
3 J3 W4 H5 A A' A- r6 }/ |) t
char ch[2];
) }) b# ~" B# ?% Z
; _$ k7 o! J$ H9 m. H+ ?
) e" [+ ?: z' z
+ D( B; ~- B# s
upp_interrupt_count = 0;
4 ?8 j& b% o# f' b
upp_error_count = 0;
J. k, m! W# N# C* U
. \/ w( d, l, J+ G
UARTPuts("\tResetting uPP buffers...\r\n",-2);
7 ]& H9 O c6 J. P: j0 J
// Initialize data buffers
) b5 _9 B+ Y* E. b
for (i = 0; i < upp_frame_size; i++)
% C/ q6 e# t9 ~7 K4 ?
{
0 f, {3 t& U, ]2 N
upp_buffer_b
=i;
& i* X! N6 G6 y
upp_buffer_a
= 0xDEAD;
9 D3 U' A* e1 ?: c' V
}
9 d! n- _' \$ z8 P" w
2 @' D4 _- i# j M& ^
//for(i=0;i<1024;i++)
$ t4 s5 _6 X/ ^4 i
// temp
=0;
7 o5 A* P; r: d. a
& q+ a$ Y- h5 b
//UPPReset();
9 I7 I, p' ]0 f( B% h! q
/*启动UPP DMA传输*/
/ E( a7 x& q+ k0 g9 I* B9 h
UARTPuts("upp_prog_dma_i\n",-2);
7 }; n- z( p w8 Z& }! k
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
3 f! B5 _1 u0 Z3 v
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
1 L3 y( ^3 `7 Y: s# |- n
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
. b( }" [* |( z1 W. c: M
( b/ p: K# p+ ]! _5 Y, y* P* M
UARTPuts("upp_prog_dma_i\n",-2);
* V# w: F. ?4 H1 k' a5 A! _
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
1 F+ m# z: _4 ~+ b% B
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ V4 w) z9 V( M8 Y9 d, L
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
& A4 ~0 x. @6 _0 G! e2 f
' U: i6 G Z6 A0 m/ v
/*等待UPP传输完毕*/
, z) c( [! B2 |6 u% ]: @4 |; n4 Z/ Y
//i=0;
- Z* ]2 E6 I( F; t
//j=0;
4 ]5 a! _4 ~" o4 v6 K( T
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
8 s, H3 N" g1 w3 y5 A& {: f A
{
6 E. V) d" u F3 { R! n) h
/* 测试UPP传输的同时操作普通DDR数据
, @- R5 P5 [' ^* O3 B' w" @
temp
=i;
4 F6 y9 E; p0 |+ f( {
i++;
; s7 J& f% t9 Z3 O+ Q
if(i==1024)
* V; Z' b- e) Z" p1 L
{
& N* P7 h. W. d: b: b+ C" _
i=0;
F9 u3 E9 V$ G$ H) q1 e" d8 _, T
j++;
6 {/ d1 d8 g0 h, {, \3 t2 j
}
: S/ B2 P$ d, H
*/
$ z7 ^5 N. u% U2 A5 w$ z" a& ^
9 d% q! P9 x: h0 Z! _
asm(" nop");
% R5 D8 p$ _# A2 a7 r
# ?) v1 q0 p8 Q8 t2 H- {- Y
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
F8 H2 g* n# W* r
}
/ P: z, g+ @; l0 r
& }1 K3 ~# Z6 ~7 u( N- R/ ^
/*检查UPP传输的数据是否正确 (loopback modes only)*/
% |' t( d g# N. d# C
//UARTprintf( "i=%d\n",i);
3 \7 i' Q1 |1 R, O
//UARTprintf( "j=%d\n",j);
3 I4 _: F K) I* N ]# Z+ f( N
UARTPuts("Data mismatch in buffers.\n",-2);
& s* p4 y- |1 `: O' M# O
if (upp_interrupt_count == 2 && upp_error_count == 0)
3 a" f$ ]* J1 W. I3 V- q
{
" l, `: s' P! q) E- ^) R3 P4 o
for (i = 0; i<upp_frame_size; i++)
: a# r& ~8 n# M/ a C
{
" q4 ?1 S! o9 j' [
if (upp_buffer_a
!= upp_buffer_b
)
9 f& A% S: w( U
{
5 Z# ^" N* V( y. T+ p% e
upp_error_count++;
% s" i+ @0 m8 V& r9 P7 ]
}
1 M" |" v' J! B9 l2 q
}
( |3 Q! H/ y i
}
+ S/ k( V: l1 M
. H5 a7 x, H+ I& q% I6 \. K* g
/* 报告通信结果*/
; p6 w; [! o; G
if(upp_error_count != 0)
# a/ D4 T; x+ G3 [4 K* Y" q3 m
UARTprintf( "upp_error_count=%d\n",upp_error_count);
. |4 F) [1 t$ e5 m: d1 z
else
! s- L, z/ G h: l
UARTPuts("uPP transfers complete!\n",-2);
" W! U. h" T" F( D8 k
4 O5 C A) Q# D: G9 o
UARTPuts("Do you want to print all the data?(y/n) ",-2);
% p( t# R% O8 A9 Y
UARTGets(ch,2);
) H' J* O8 T7 E9 L# x! x# u
UARTPuts("\n", -2);
# N5 ]" j0 A# s
: Y; _$ P+ p! k& f
if(ch[0] == 'y')
* A" ?5 B+ i7 m( \5 R! P& Q. L2 J
{
' p2 j6 Y' E6 K* L1 D; X' I& x/ r
/*打印全部读到的数据*/
K: y( t6 L3 o% t8 K# ^
for(i=0; i<upp_frame_size; )
5 i) A4 F' S1 r# m" }8 h, I6 W
{
+ h4 u9 `! J+ u) r
for(j=0; j<5; j++)
3 z* l* i: |$ z, o/ u6 c
{
; e' B( w" X7 u' a. M
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
7 T& z) z! Q& O, b( C5 R
i++;
2 Z. D7 {# p/ s0 ^( ]: D
//if(i >= 4096)
) `3 I3 \! N) H
// break;
9 P& V- U$ R9 m( \. |+ l
. K- [% c1 v7 g3 t, ]
}
; B3 }: q+ S$ v2 c
UARTPuts("\n",-2);
9 a, b2 V: y* ^& Y! d' V3 \0 K
}
f8 ?% D5 J. i9 R' W2 S/ _* ^
}
/ s* n6 X) }2 ~
% ~, @, H: Z% ?+ ]& @2 J
}
3 P* E8 ]0 ?. A
. b( |- a9 t# @6 h& q8 z4 N& ]
) j: u( b! d" t+ v0 O/ S9 K
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
+ G" Q" c) g) s$ K) s; e8 t' |
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
) @& v! L2 m/ q6 @2 g' j9 R6 y- J) k
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4