嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
* G7 }3 h. P$ y+ c& b, g
Void UPP_TASK(Void)
7 d) H+ i$ @* ~9 l; T5 c8 Z7 `
{
, K& G& X3 s2 n7 d y
, t( R2 g O1 i ?" t; n2 ~; P
int i,j,k,target_int_count=2;
+ u, [2 {% m, N1 W) J* {
char ch[2];
3 s5 R- B& J( Y1 x
F# ~- S' T2 s# M
n, I& I% L! ?* L6 J
; @# o5 L) F7 @, ^7 @' w' N7 Q
upp_interrupt_count = 0;
4 |8 o2 B8 q: C! `! c* J6 e. @
upp_error_count = 0;
0 h/ X L4 a. J/ z* I5 g7 x: c
9 c, |3 ^% ?# B# b" [7 b' D
UARTPuts("\tResetting uPP buffers...\r\n",-2);
' |/ x8 z$ R4 B2 i
// Initialize data buffers
! S9 S \$ U% H6 m6 y2 o* z
for (i = 0; i < upp_frame_size; i++)
; I- m, u5 v) M
{
2 f Q1 i& E0 h/ E
upp_buffer_b
=i;
7 M7 z- _6 d _' }4 [4 K$ u5 ?
upp_buffer_a
= 0xDEAD;
% M3 w' d1 `- c0 W
}
; H. t: A7 |, A C% r3 b
& q4 f7 y7 y: l: d* I
//for(i=0;i<1024;i++)
' R' ~8 {8 P1 [3 b7 ?% y; z
// temp
=0;
/ ^, R( \5 q9 a) G& `7 g
, h- k3 x7 @9 E. H4 f
//UPPReset();
/ J" R5 T) X% Y# {9 ~) i
/*启动UPP DMA传输*/
5 [1 Y0 [; {. H: }
UARTPuts("upp_prog_dma_i\n",-2);
, r& o( B6 X. _$ S/ E
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
: v* z5 j! ~9 Z" V
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 ~7 }& Y2 p7 K4 Z7 J8 f( h' I
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
5 R, F+ ?" I7 M0 {1 a9 @& _; T
/ ?' e; F9 r, J9 j9 e% C
UARTPuts("upp_prog_dma_i\n",-2);
7 A' _& U$ M/ L9 ], L
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
D( J3 p/ C# A6 L9 Q4 x; V
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ l6 n) s! x: b/ }5 u% z V
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
. t* ^, \) b9 v8 `
" ?) k/ Y- r' t: X d
/*等待UPP传输完毕*/
# U/ V4 H* x2 O- Y$ t9 k+ `
//i=0;
5 A% ~$ h( P5 a( ]1 A
//j=0;
) }* p% |* P# G" N0 Z" g
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
/ f1 v# z% b4 G
{
, p% e" C6 g6 W# q; x$ _
/* 测试UPP传输的同时操作普通DDR数据
1 i8 q) r8 i( m$ m+ m
temp
=i;
Y. I6 x0 Z* p
i++;
3 e0 W* n, g* u; `) }% f/ s
if(i==1024)
( f- Z' z7 }4 m; k5 n# O7 q
{
0 K7 z9 V2 X3 V( ^! x: ~+ @6 C1 ?
i=0;
2 n7 d) c6 B7 u' E' Y6 `( Y
j++;
; S- X) v- T. x9 V+ M
}
- {7 r. a1 I" k1 }. O! R
*/
+ ]# F! c! i1 ?( D% ~
6 I% F: I2 G4 l; {0 g
asm(" nop");
: F. o8 l, B5 @- G7 }5 ]
. p+ j7 R/ g) D
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
$ u2 r8 f" y9 m! O1 Q3 P: N
}
( m/ ~- ~# d% x5 r& z# V+ y4 X$ `7 u
* o2 M+ W; f( x& k
/*检查UPP传输的数据是否正确 (loopback modes only)*/
2 P* |/ h1 |% v" m4 I
//UARTprintf( "i=%d\n",i);
; R2 y. S5 t" o) I9 D
//UARTprintf( "j=%d\n",j);
( r: J4 [* F- y7 z
UARTPuts("Data mismatch in buffers.\n",-2);
/ h( Y7 F$ W% @* f( ]
if (upp_interrupt_count == 2 && upp_error_count == 0)
8 y* m9 v/ y3 L
{
- a# e8 V0 q' M" U7 m
for (i = 0; i<upp_frame_size; i++)
/ {0 U1 z1 s" }8 g7 w9 J! ^8 A
{
) a# C; d' |, Q; h
if (upp_buffer_a
!= upp_buffer_b
)
! g( C7 G$ \ s8 m$ {6 `0 p
{
, O$ |7 m+ _9 q
upp_error_count++;
) p g9 b" o1 P' y* {7 q0 D; K" `
}
8 {) s& o. x e5 f
}
/ J6 q& o2 ]7 p, ~3 e% X+ J) \
}
- i" U: r' v* m9 J2 `! `% \
- R: C4 Q/ e1 N0 @
/* 报告通信结果*/
: j7 Q9 ^( [" x, d1 D
if(upp_error_count != 0)
4 O# H# o" G, S2 s0 m
UARTprintf( "upp_error_count=%d\n",upp_error_count);
5 Y. U. P9 A& j" N+ L, O) Z
else
# H0 v. j7 C! \3 X2 H* p7 d
UARTPuts("uPP transfers complete!\n",-2);
S& H& ~5 D( M! n* v
G* M; o8 |: ]* o; M/ R! a
UARTPuts("Do you want to print all the data?(y/n) ",-2);
5 a4 r, R0 g1 _# k5 I5 ^
UARTGets(ch,2);
0 n1 a3 D1 t- _) E& `* A# C5 C
UARTPuts("\n", -2);
& |0 m2 Z) p' i, _
6 Y7 M. U/ k! A3 V- X
if(ch[0] == 'y')
9 J$ g9 F7 j _" I- s' R6 P2 r3 W
{
# O1 v1 {! s' N8 n
/*打印全部读到的数据*/
4 v D+ Z+ P7 Y) o# C
for(i=0; i<upp_frame_size; )
% Y0 r J2 i5 d: [
{
& x7 m5 ]* Y$ M' V) h
for(j=0; j<5; j++)
" X' u! ~$ \6 {
{
' d: N7 Y! \/ l) l) U
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
- Z2 F( [4 R+ u8 I
i++;
$ R: m" t. f+ d
//if(i >= 4096)
% O& A( ~' d% E# Q! n
// break;
e4 k$ Y2 _" C. V( r
r9 ~* t) q, Y Y: `$ d# ]
}
; V4 x" ]# {. x4 ]" z+ [& G6 l( J' [
UARTPuts("\n",-2);
* r/ {: y; ?1 z' c
}
! J# \: t0 F r$ c5 s }+ A( o
}
$ Q( n9 G8 m% R! Q: D& |1 I
7 M4 h& k4 D" f+ ^; ^' w
}
# P3 y4 p& Z) g. ?: Q
5 G( Z2 `* D5 {4 ]$ w0 E; z
( ?9 u' a2 q3 J) K( m* v. d
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
: l3 B4 B" c" |, P/ b1 @5 S/ N
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
& L' D# ^3 G, F7 R$ Y
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4