嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
; V& Z: c7 ~, A9 r3 X7 Y+ k
Void UPP_TASK(Void)
; l2 Q( K7 K' h. C' c
{
, Z$ U9 f* T! d
- k& ]8 t% Q! D8 U' _1 V
int i,j,k,target_int_count=2;
( [3 `1 A& ~7 ~5 a% o0 v
char ch[2];
$ O: I7 u" Q% z; E. h+ i
6 e( `$ q' H6 q' }2 K: g
; l" g2 [! W2 B. c
$ t v8 P& Z( b' p3 E7 J: w
upp_interrupt_count = 0;
- J8 n0 y9 ?5 ^0 V, g1 d0 c8 L
upp_error_count = 0;
2 E: W7 k) k/ Y A
. }$ U& \7 H3 V2 d
UARTPuts("\tResetting uPP buffers...\r\n",-2);
% @0 ?% u; A' n2 I; W
// Initialize data buffers
% \# ?# X/ @- A1 g, q
for (i = 0; i < upp_frame_size; i++)
/ r1 \$ E" H$ C3 ~+ D* _) [
{
$ u5 N/ \7 r4 N
upp_buffer_b
=i;
# B1 k4 l& v, b" G" u
upp_buffer_a
= 0xDEAD;
' y, a C9 _, V9 z
}
P, |4 A6 S$ _- t4 b
, e5 N1 r5 \- p( V, Y+ Q
//for(i=0;i<1024;i++)
4 _3 t3 b, V* U+ A3 u+ W
// temp
=0;
- f# M7 _8 m9 c/ J% v( J) V' h8 h
2 d2 x4 u% F/ A: u. V1 l
//UPPReset();
( q3 Z" U/ ]+ k/ g
/*启动UPP DMA传输*/
' M8 ^4 Y* c% O3 [+ s( ?1 T
UARTPuts("upp_prog_dma_i\n",-2);
5 d* o3 x* T/ o/ ]& M' J
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% l! _3 o" ~. Q. W8 b
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, j9 S9 K3 t; s8 S6 `- m
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
- K% F9 f5 x. |" H
# e1 @( g0 r* H' t; `
UARTPuts("upp_prog_dma_i\n",-2);
7 s6 ^0 c# j/ F
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
. |6 X' [0 |8 M4 K! g( l! U7 A
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 j; W% D& p+ I2 |( @6 ^
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
% g4 p; K+ D, t9 M5 ^3 V
) {( {$ A+ u5 Y0 ?; r2 m
/*等待UPP传输完毕*/
# K5 w1 C' W3 _4 W% R ?5 V, H6 z2 ]
//i=0;
0 {0 W# {% d7 i0 \
//j=0;
' f' Q4 T: \: c1 I; E
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
! z+ o" V/ B5 d2 b7 d
{
# {$ A0 x% u: U9 S: Q* K
/* 测试UPP传输的同时操作普通DDR数据
0 R I$ R" U7 u! Y
temp
=i;
+ Y# ]* g; P' T9 c* E0 k* ?
i++;
2 x; Q! t& A! R8 {. E
if(i==1024)
: ?" G+ K, s4 m
{
, p" x% s% Y) c3 o& a4 P& X# Z
i=0;
6 x' U) a$ O) \" H7 H
j++;
6 u/ H8 \2 R7 [( l2 s
}
( G4 a$ |( q" i- J" y! D2 a# T
*/
% Q6 K" D5 ^( {5 h2 W1 }5 L' i
) A& a4 C+ w( ~
asm(" nop");
$ i$ S3 o* O! z9 a0 I0 m& N
8 T; [& K/ L* a2 ?
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
4 W& O- Z- n! W
}
/ ~0 Q2 u6 u; y% d% n' w
0 N C9 ~6 Q/ v9 O, e5 o
/*检查UPP传输的数据是否正确 (loopback modes only)*/
3 m* @1 d5 Q" u
//UARTprintf( "i=%d\n",i);
5 B# I7 O; _# G. Z$ _2 B
//UARTprintf( "j=%d\n",j);
' O* M, w1 f/ u! y( R$ m
UARTPuts("Data mismatch in buffers.\n",-2);
+ `8 R: k- |, B: Y* ?8 K. {
if (upp_interrupt_count == 2 && upp_error_count == 0)
6 i) u2 h! h( ]+ `& W4 W/ o
{
* B, y9 a! C! |& _
for (i = 0; i<upp_frame_size; i++)
+ S3 R) o Q6 Y; g0 ~- [
{
$ @) D( w$ e( }4 C( ^3 M8 _
if (upp_buffer_a
!= upp_buffer_b
)
, B7 J" \& ^) {" g% r
{
, U k) O' l, C& |% i
upp_error_count++;
# Y; a# D/ v/ T, P6 d7 c
}
1 s% t0 K H' j& u8 Q
}
: z8 H, K: w. q
}
5 R" @3 N# H) X6 W6 Y1 f
$ j6 s: h, {6 |
/* 报告通信结果*/
- T6 A% _9 J$ E/ f B8 [
if(upp_error_count != 0)
* h2 E% p9 u% {' d" e9 c
UARTprintf( "upp_error_count=%d\n",upp_error_count);
# R+ _$ Q$ I9 ^8 T
else
" ^/ ^; x5 V+ \0 B. t, j! ^
UARTPuts("uPP transfers complete!\n",-2);
) e4 Y+ ?3 R m& L4 F
% |* f6 Y9 R& _, X7 m
UARTPuts("Do you want to print all the data?(y/n) ",-2);
: H- R) g* K! p4 A+ k' t7 p
UARTGets(ch,2);
% P# G) ]5 ]' b |0 w
UARTPuts("\n", -2);
2 N0 D6 |2 {1 s( Z" _9 @3 E
6 a2 R' k6 K8 \8 i
if(ch[0] == 'y')
& ]$ o ?: m$ B! c& y& y
{
4 N' S+ V, H8 Z4 E
/*打印全部读到的数据*/
) `- e3 `. Y( j( p2 |, J
for(i=0; i<upp_frame_size; )
9 O, z, x# r5 O
{
: V6 L+ h1 ~6 c( c
for(j=0; j<5; j++)
& E2 ~" V' R; w1 }% b: m. h6 ?
{
2 @7 v) b' i$ f1 G
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
) \: u7 n6 F1 {6 x4 q
i++;
. K1 \; s, R$ w, l/ K9 x- x! U
//if(i >= 4096)
" E% d8 l! ?! T3 q# |- l9 [0 I
// break;
l0 H% ?) m9 P7 j- f6 U
7 J. e( T0 l9 r4 u x" B0 ~
}
3 f2 p3 {: ?4 ^3 v" I
UARTPuts("\n",-2);
( y7 [( S" t: W0 K" c
}
8 j B; v) A Z
}
- a* ^: F! P+ j, _. F- ~
3 w% U! [; J( O) b9 m/ p
}
% i/ `4 l" j- g2 A
5 l5 A& [0 A: _; l: m) }7 Y
* }1 _! x: L$ i5 ]
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
- j1 o \/ B& |6 H! ]/ ?
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
1 E7 L2 X9 o" u. K" s7 j2 `; d
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4