嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
) q1 C$ d. n+ W, ~# J: k
Void UPP_TASK(Void)
7 w4 g0 U2 C' o
{
5 G T7 L1 L1 O& H
0 ?, c; a c$ c5 o
int i,j,k,target_int_count=2;
& t, l v" J8 i' D1 ~
char ch[2];
8 ]6 Q4 W5 \6 P1 I; v0 L7 u) K
0 [( P1 P: C" i
- i& j' y. \3 }/ @
; y1 \4 d1 \, z' U! h' q
upp_interrupt_count = 0;
* C6 y9 x2 u5 U* N" c$ U0 W
upp_error_count = 0;
5 R: Q4 _5 N: _ @" s8 O
d& X) g8 n& X: N1 g, m
UARTPuts("\tResetting uPP buffers...\r\n",-2);
2 r$ l# C! D' r
// Initialize data buffers
% L5 f2 O3 X* @, T
for (i = 0; i < upp_frame_size; i++)
' j- ]5 @' k7 L& C: N& R U
{
, ^5 W/ n8 \7 k) O) h1 C0 Q
upp_buffer_b
=i;
; G! Z! w w" ~" U# K
upp_buffer_a
= 0xDEAD;
( d, e/ _! R" Y9 }) {' h% E$ `9 [
}
- `2 t2 a7 N; W& Y: i, _. e6 x
3 i( h d+ p0 B+ o: h& }1 N, x$ R
//for(i=0;i<1024;i++)
6 x' C R, F/ D/ T+ p, Z
// temp
=0;
5 p/ s t+ L# L c
+ Z- E) H# Y9 k) N. u. ?
//UPPReset();
$ C' P3 c* i2 {2 A
/*启动UPP DMA传输*/
; [# H# {7 p! r1 T
UARTPuts("upp_prog_dma_i\n",-2);
' {% k0 A2 Q2 m$ g' a
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
9 ?" K4 j( F8 F) ~* G# r4 b' ~1 ^
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ O2 ~7 r4 R$ L
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
) M. r* y* N+ ]2 |7 u3 r
0 k% Y3 {+ [7 p# \6 Y2 D
UARTPuts("upp_prog_dma_i\n",-2);
5 g" [9 a8 S, m8 t( Y' H
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
5 x" B4 ?4 x7 q% d# r7 G) [
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' t W5 q7 y) q! _* [$ Y6 A
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
1 X/ R& s$ V; O' o0 F
$ f, b' F! `: Z6 u P) s9 G
/*等待UPP传输完毕*/
) l1 e" e& v: ?, L( Q4 \
//i=0;
+ w% B7 q/ j' e, {2 K" S; [
//j=0;
2 u' Y$ b# B5 `2 g" Q
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
+ \( ]0 E2 J2 m) M# B
{
: X! L% x- u7 L8 \0 \/ Q4 ~
/* 测试UPP传输的同时操作普通DDR数据
* |; P# ~" |: P% Y! t, T; @
temp
=i;
6 B$ g% j" H6 i0 Y
i++;
3 i9 _, ?. {* g& e% _7 }2 {; v/ D
if(i==1024)
2 j( r! v9 s9 R# _8 |+ h: M6 l( y6 l
{
2 @0 K4 y1 p0 Z7 J# w+ s: p4 E
i=0;
# g( s% F2 ]2 y4 G+ c
j++;
9 Z$ c) m$ i4 g: t G
}
8 M) Y% Y% e, N
*/
! \' B" ?( w. i+ D& i; h. z
" o6 F4 k+ O& @$ J }% n, y8 M/ |
asm(" nop");
& f. e& ^' ^$ u- M3 w6 j4 a) s
4 a/ O; C1 E$ h+ p% o
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
3 S, ^% [% r; V
}
: O( W( [5 f6 l1 m- Q( Y
: Z9 [& @, m9 n: p \$ M
/*检查UPP传输的数据是否正确 (loopback modes only)*/
# b+ z$ C. z2 k& t
//UARTprintf( "i=%d\n",i);
5 W8 e! V7 @* ]5 n. a, o0 V
//UARTprintf( "j=%d\n",j);
2 t" L, K# G& i( G, x# H: Q! B! u
UARTPuts("Data mismatch in buffers.\n",-2);
- x! M' ~* r( H1 H# B6 ]
if (upp_interrupt_count == 2 && upp_error_count == 0)
) K' o4 M* t* G0 Z5 w
{
. }4 {) A Z# w. V
for (i = 0; i<upp_frame_size; i++)
1 ~3 h3 Z+ p$ W+ e
{
5 _0 t9 P+ H- k7 s f) \1 z
if (upp_buffer_a
!= upp_buffer_b
)
, E" s! ]6 U# F4 i
{
0 n- h/ G$ n; S, A
upp_error_count++;
" r% a4 A. v# E) z* @
}
7 @2 W0 K# ?4 D6 Z, A6 t7 e) G' w" N
}
# k2 \. n7 L- Y; B0 s1 L
}
# i8 I& e: q J9 c I$ J/ w
8 F3 o+ y0 |1 f2 U ?" G
/* 报告通信结果*/
, }7 R, f9 c) J* i5 N
if(upp_error_count != 0)
2 l n1 o7 {, V+ c8 ]. ^$ n
UARTprintf( "upp_error_count=%d\n",upp_error_count);
6 G8 q& z1 b( ~2 |/ [, [0 w/ v
else
& f7 N1 |4 [2 b9 F; l* x- C
UARTPuts("uPP transfers complete!\n",-2);
. L! Z- k8 z+ V
3 p: _# @$ L+ w, W
UARTPuts("Do you want to print all the data?(y/n) ",-2);
: X* A8 m! s& A; \# |& i0 h9 B) I6 N
UARTGets(ch,2);
( R( L8 ?- D, G+ {, M% I. U/ c3 A
UARTPuts("\n", -2);
8 k$ }9 _- P) Y( `# c
( n" `/ m% g' ?9 h6 G7 K
if(ch[0] == 'y')
7 O& `. A8 h2 _ Q1 F: K
{
, X2 y4 w9 m, m3 j+ K! d( E- p
/*打印全部读到的数据*/
! o: z5 n. s: ?1 [- j* N8 j
for(i=0; i<upp_frame_size; )
. l; t; d8 X9 V; M0 O' |# s
{
6 F7 Z8 ]+ x; {# s- v5 U0 g5 ?
for(j=0; j<5; j++)
* ?7 c, U, s2 Y! V; m
{
# A6 v5 ?/ ]$ t/ [8 S8 u4 G
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
6 A9 k' e: n) s# j0 Z( T
i++;
# w. p+ ]- A# |- L# f1 y% ?
//if(i >= 4096)
- n: U: n/ h" |, q/ G. L7 C ?; x
// break;
+ j ~# }5 `: h
. y& j; ]3 }) a' M! g: s
}
7 @' k' C3 X( d- U
UARTPuts("\n",-2);
, b0 |4 g9 K* ^
}
I* Q1 Z- ~' f: t- k
}
) {5 a1 `" k g% L+ Z9 ~& _9 c
( X3 Y: @. f2 R$ Y2 W3 {5 _4 M% q
}
9 u2 E5 u* Q @& Z
' f7 @4 C8 @ }+ W6 s
$ Z; r5 {2 J/ G! R
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
1 Y5 @4 }9 S$ A
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
0 E2 k9 ~& I3 ]# C t3 E( N. f
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4