嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
9 G) J2 q ^2 s% I4 E! l6 ^5 ?& i
Void UPP_TASK(Void)
4 _ _ q* }/ N" {1 }
{
' v) @9 U$ [ ] y; j
( }2 o) m! X+ _# T
int i,j,k,target_int_count=2;
" O6 O) V( q& I$ j1 j& A' h( g
char ch[2];
9 X/ @2 O! i, o; M: ]
& n( E1 \. ?6 N+ n% [# @
/ a; n* { F# K% [+ F
+ i: X, P4 ]9 y8 [6 A& u3 ~
upp_interrupt_count = 0;
- Z/ @! A: ~) c4 f" w* o
upp_error_count = 0;
F; c" T, v0 Q* S" g: h
4 s t# n# A; f) _* d- N+ x
UARTPuts("\tResetting uPP buffers...\r\n",-2);
( Z9 Z- U; f$ j% D
// Initialize data buffers
5 p9 I7 R' o* ~- l! o& E9 b& Y
for (i = 0; i < upp_frame_size; i++)
2 k' ~% f! ~- `8 I4 m3 q2 b) m
{
( b5 R) i5 c$ k. I, B- l8 H
upp_buffer_b
=i;
- \. ]9 i- C/ M" h
upp_buffer_a
= 0xDEAD;
, x: i6 {" n' \' P& K
}
. j6 N: z7 R; G& L+ H6 X, u8 {' h
: d) i" N- U6 W
//for(i=0;i<1024;i++)
1 d Y! r& y* m4 E0 x
// temp
=0;
1 J$ p& G. p2 r; r
, e p4 p' R3 D! O3 S/ E% Y* ?) s
//UPPReset();
+ e: l4 v/ Y* S; [' H
/*启动UPP DMA传输*/
7 g: r3 ]0 Y0 e, T' T
UARTPuts("upp_prog_dma_i\n",-2);
8 i# h1 ?7 @1 r9 c; V1 F
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
) w" ]2 K9 c4 ?* U: G
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% Q' M' D( g% f4 s
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
# N) u: z: b h) N! K; g
4 @. ?, v. _. X6 Z m1 q' T
UARTPuts("upp_prog_dma_i\n",-2);
7 u( s9 a" I& [) m" ?
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
# y, G4 U/ A$ o' H, X2 \- v2 T) B
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! P" a6 C5 m( |7 x3 I5 q8 u
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
, T/ v0 x8 h& D# j7 Z
- f. p F1 r X. M* R" j
/*等待UPP传输完毕*/
0 F, Q3 E- J3 Q' t/ R
//i=0;
|* U" e" V! X7 |6 N9 H
//j=0;
" w0 w* e D* V# `& M7 L
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
5 t3 `/ t$ I3 U7 [; W
{
7 b v% c) ]2 H9 M j$ O+ b! V0 ?
/* 测试UPP传输的同时操作普通DDR数据
6 S- T, v' o, Y" F* W! S/ v* Z
temp
=i;
9 K/ ]8 ~- ~- ]8 Q7 I- P
i++;
3 n9 a- w" i! ^7 q
if(i==1024)
( _5 a) f5 @5 ?6 t9 M# N$ I
{
, ?) `- `- C, O: m- Z) W9 V$ ?
i=0;
3 I0 P$ |; V& ~
j++;
% ]1 S; `- C T: O. K
}
# S3 t$ e& P# A3 l* i
*/
l0 b0 p- [! V4 X
" y( Q `. q0 i7 N! E; e' X4 \
asm(" nop");
, M* j' x) E# i0 A4 ~' R# ~9 {
; z1 V: E7 p2 k! u$ M/ K
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
; }4 R& v% u4 [- O: f: l" f
}
! k! D6 a6 i$ k3 R7 z& p! a
) p9 h$ a# S0 l
/*检查UPP传输的数据是否正确 (loopback modes only)*/
9 P4 Y# n3 v1 H) }; a5 d7 E
//UARTprintf( "i=%d\n",i);
" y0 r- w( {6 E3 ^3 S5 m8 K
//UARTprintf( "j=%d\n",j);
8 ~; _) i2 {' L* i
UARTPuts("Data mismatch in buffers.\n",-2);
0 t" e' d1 [) ?: E! H" P; c) d
if (upp_interrupt_count == 2 && upp_error_count == 0)
$ `6 a# @: y9 k" v2 d
{
5 V; W% g' R. ]' R& A+ D, Q/ C
for (i = 0; i<upp_frame_size; i++)
1 e7 O$ } e7 Z/ Z5 C! F: \
{
P. h- J& n' w
if (upp_buffer_a
!= upp_buffer_b
)
" M& G; A _( i% K- O
{
8 L3 G# P" y( p- N' D
upp_error_count++;
9 O$ s# d% x6 _/ r. g6 R/ O9 Z* f
}
% k1 ~+ K0 H$ H; E9 m: O7 e9 B
}
, @- X) X* Q5 i) ~' X4 M
}
) D6 m! V b; ~ L1 P: F
6 {% x4 X% T! M+ U# |
/* 报告通信结果*/
% g5 Q& g) D1 i, [0 n* G
if(upp_error_count != 0)
+ T7 c r4 x" i( W9 g
UARTprintf( "upp_error_count=%d\n",upp_error_count);
# |5 O7 X3 V2 o0 y
else
4 m' r5 D" q1 |8 b$ a
UARTPuts("uPP transfers complete!\n",-2);
: G7 ^2 q5 P H% @& V
& H% p! i+ Q' p
UARTPuts("Do you want to print all the data?(y/n) ",-2);
t' l |% I0 e( p9 F
UARTGets(ch,2);
8 _; z4 e: x4 Y: C9 _: j" [+ C9 B
UARTPuts("\n", -2);
/ ]; X( w3 b& p' O" s
& {! I( u' A; w9 O4 q# w- D
if(ch[0] == 'y')
* b, s3 p U% h& E3 @5 g
{
4 e X# S: F, U" ?* w5 I o
/*打印全部读到的数据*/
- y8 ?$ t+ k: n. {" R/ |' E
for(i=0; i<upp_frame_size; )
, w' R* w# D, E8 ?6 Q, `
{
5 ^* L! \( @" d: c9 y
for(j=0; j<5; j++)
V' v# M' ]4 C+ M5 N N7 z
{
7 w& ^; S: y' R& J% B4 B/ L# p
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
3 y7 o N# y C
i++;
/ P. G& Y. D/ |2 U
//if(i >= 4096)
! [/ o6 J3 |3 s& k/ p- D
// break;
7 F( k8 h, X1 I$ k! C' F
1 _" p! j2 Q* s" m3 p" A; Z4 N7 \
}
5 j+ l- L. x% }# B& r8 q/ Y
UARTPuts("\n",-2);
' E' `# T* h6 y r5 Y
}
6 L( D* ~- B" G+ B) w) b, |
}
/ q$ @; B X1 h
- K0 r1 r& Q7 o* Y* }" m R
}
4 _: c, ]: Z0 T% d' p0 F! n" N
- D9 c3 q' O* \0 a
' o" |9 ~; u' k9 g, I4 Z* C
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
$ v( R" _1 o" `5 `; a
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
& Z1 L5 g" D2 m& ]) Z
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4