嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
f: {# `, F* m
Void UPP_TASK(Void)
6 G7 I- J: f$ i0 s
{
9 |( ~' D2 s) C
1 {0 D5 k" }8 v, c0 T
int i,j,k,target_int_count=2;
8 t7 z" q: r5 b9 T
char ch[2];
+ |. |7 Q) S( _2 O
( U) b1 B# W1 ]* P
* Y6 r) i8 H* U+ Z. Y% [: i6 z9 m
; ]8 D$ y! V8 s9 Y
upp_interrupt_count = 0;
& o1 q, b) V3 D' v+ a7 w2 e
upp_error_count = 0;
7 ]/ y* f% B# L% f: Y% q- _
' u- s& E/ O |! I
UARTPuts("\tResetting uPP buffers...\r\n",-2);
* W1 t! _2 i1 G7 x* s' y7 q
// Initialize data buffers
& E7 W8 R: I& o; [+ z* R: ~) X X( s
for (i = 0; i < upp_frame_size; i++)
4 M- F* k; ~) t- s- X) K0 i2 M
{
1 \ Z2 [' [5 \* C* D' E D
upp_buffer_b
=i;
, a( O9 `# K0 e
upp_buffer_a
= 0xDEAD;
1 r# `) ^( M, p8 B2 p
}
$ j3 D/ R6 @# U6 O2 _+ G! W& L3 z
' k) [) j: \+ y( x& X8 Z
//for(i=0;i<1024;i++)
z, L/ e5 l- p5 J O0 N; d
// temp
=0;
. a0 F. f. U ^( Q/ O% k
& r! Z7 |( G, \/ G" a9 c
//UPPReset();
0 r. ?9 z: N& e/ E
/*启动UPP DMA传输*/
! F8 @! Z8 {4 H1 y* _5 }
UARTPuts("upp_prog_dma_i\n",-2);
1 c' J4 [. d2 p" H1 i
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
+ \: G2 u+ h9 Z- N5 S
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# d% v0 f6 T( Y
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
$ u, c: \# u0 e3 B
& Y, z. `; i. @# e H; C
UARTPuts("upp_prog_dma_i\n",-2);
1 C% p' H6 f0 ?/ t+ b7 [ c! J
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
! x6 e; ^ `" I
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 C( }8 k( @+ u: f
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
; @+ l3 L$ g' n( @- ^: A
& g; w% j" l4 }0 Q" O' M
/*等待UPP传输完毕*/
5 \) D$ }4 U/ ~# i
//i=0;
' L, J" P1 `& Y8 u4 ?9 h
//j=0;
) i- Q, i3 K! i
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
0 z l: F6 G0 {1 Y/ T/ Y+ x( R3 q
{
) c! m) O0 T% \/ k0 G2 S! Q& n# J
/* 测试UPP传输的同时操作普通DDR数据
1 b' G; {) b: ~ n' N P( q* Q3 a
temp
=i;
( |5 r0 r4 k: u& j- D7 j0 `1 e
i++;
. G: e( A# |6 u& K
if(i==1024)
' ], a$ B- A# i- E
{
- R' m1 s% N. y
i=0;
3 ?6 T% d( Z# a4 ?: O
j++;
$ @; o, G" g8 f$ S: f
}
0 n9 ]8 Z/ v- N3 N" c
*/
* \& ^1 M1 v9 w' M
1 z# [2 M- {6 \1 o
asm(" nop");
+ L/ u9 K5 f3 x: g, P9 }8 e: e( M
3 f$ O; e# c9 V- N9 n1 U' @# O
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
+ o w8 b+ K! D: ]9 {5 Y0 k9 m( H3 F
}
5 O) h# i7 H: O6 s2 |1 f4 k' H
/ v. I" z/ V# s+ n. w" W: B) X) Y1 }
/*检查UPP传输的数据是否正确 (loopback modes only)*/
7 K J0 r* J5 c
//UARTprintf( "i=%d\n",i);
$ i" f/ x) `+ v% { x
//UARTprintf( "j=%d\n",j);
( ~" y% Q/ d- \5 V
UARTPuts("Data mismatch in buffers.\n",-2);
, y$ h9 n+ q# d! n- `
if (upp_interrupt_count == 2 && upp_error_count == 0)
7 F% q( ?' E& F# b
{
3 W! G6 k9 }' l7 b2 f1 _+ G
for (i = 0; i<upp_frame_size; i++)
+ F' J. [# H5 F8 t$ _: V
{
# L; ^" A. a% z J8 M
if (upp_buffer_a
!= upp_buffer_b
)
# u( I" S" U1 |6 c
{
+ D! C, D2 ~0 O. s% L z
upp_error_count++;
" ~8 `4 ], Z( ^* l% @" Y; f
}
3 b$ _! k8 ^( Z+ n; D
}
' }7 v3 [2 I/ }* Z* o: |
}
8 [8 R9 |' W$ @4 [) Y+ ~- M% p2 M! ^
' U$ `/ x9 w$ V6 D) n, K
/* 报告通信结果*/
$ k! t8 N; b6 }$ I; ? x$ k+ J
if(upp_error_count != 0)
2 `- @* t. m! l5 D; V# Z
UARTprintf( "upp_error_count=%d\n",upp_error_count);
5 b7 G O/ Z: n
else
: D# G% f7 U' A3 F; ]* l. ?: J
UARTPuts("uPP transfers complete!\n",-2);
& @/ o$ q6 V* h V: t# s( \
& w2 y( V: U5 E
UARTPuts("Do you want to print all the data?(y/n) ",-2);
% u8 I! H5 u& B9 U2 s8 ~* @+ A
UARTGets(ch,2);
4 l, F# f& O v/ I! b
UARTPuts("\n", -2);
; N# b: |+ L [) F' [% E: S
" ?6 y" _9 a, Z# |1 o
if(ch[0] == 'y')
7 o1 |) G) G" Z& h, ]1 |
{
' R! F, g* l. ]4 }
/*打印全部读到的数据*/
a6 K0 Q% }' j: b
for(i=0; i<upp_frame_size; )
& {) d, p# |1 d; A) p! Z6 S" e
{
4 E- E% B* \5 l/ d
for(j=0; j<5; j++)
8 C. C! T7 A/ R- v1 u" y' k" y7 K# v
{
2 u0 M# j8 e/ m6 O1 N
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
. k7 k; a0 F# r9 {1 x) H7 @2 p7 b
i++;
" d/ e8 q$ K8 K5 @. G
//if(i >= 4096)
2 Y; ^' p) } v! h" R! \; U# A# C
// break;
0 q+ e* d1 W# [& l) w: t2 e+ P' p, Q
) ^4 y3 } L/ c
}
H* Z) j A) G2 I2 p0 q
UARTPuts("\n",-2);
. k" T/ O7 w. Q! { z- j
}
" V* z% {9 h; F
}
6 a0 ]% H& J9 ^
$ n2 e+ e' C! j% f
}
1 Y2 D* \5 p6 e) W0 [0 E1 }3 ?
: y: H( X& R! A: a
; j; K- | h6 g4 h
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
0 ^* Y2 m( w. O* f& Y- `
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
) ?+ X; |/ M8 \# h! V0 j
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4