嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
1 y1 i6 \+ c+ v2 E
Void UPP_TASK(Void)
" U, s; x$ o; `( m( N8 k: ~
{
5 y1 a3 i7 {" O) F- c: _8 S8 p) m8 j
: O4 M+ M+ K- K7 K
int i,j,k,target_int_count=2;
9 C9 Z7 {1 i: q! c, Q8 {
char ch[2];
+ ~0 r" G, x& ?/ B a* g5 O9 c
3 Y3 O" K: T9 ?& A( ~
' L) _2 G, i' G0 _& c1 l) h
r% C# a; i& m; o3 m
upp_interrupt_count = 0;
& i; }( R4 N- H# L
upp_error_count = 0;
& o' W; X1 z# g. q* I
6 G6 k. c6 l' c# w/ K" V, |# h
UARTPuts("\tResetting uPP buffers...\r\n",-2);
7 C1 a% }( M. i
// Initialize data buffers
2 }6 X6 _! g0 \1 |9 V4 }6 s6 v
for (i = 0; i < upp_frame_size; i++)
G6 o- T! n" r
{
; [5 ^; B/ G% J' G
upp_buffer_b
=i;
0 X3 e# j, t0 [5 n9 C' }( j
upp_buffer_a
= 0xDEAD;
1 g0 \" E: T# W% ]) t
}
+ G0 E9 y n- C& {+ Y" j: q
; v0 Z- }+ q( w4 k; G
//for(i=0;i<1024;i++)
$ N' N9 _! e+ y+ b/ B
// temp
=0;
5 e2 p) m9 i- q2 v `$ t
& S; B# k5 x; N& y" C) N+ W* Z. u
//UPPReset();
' ~; [6 o# g n" _
/*启动UPP DMA传输*/
% N2 {/ R1 e9 @+ I2 R! g* _+ P, H) r
UARTPuts("upp_prog_dma_i\n",-2);
( u1 Z& X7 s! Q# p6 P& u% u
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
2 e" Z# B Y* v( b* S' H
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 f2 O5 A" G8 E# Y
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
9 i. a h* d& f
) T% _5 O: ~) {9 g( S! B7 G' ?! s
UARTPuts("upp_prog_dma_i\n",-2);
' w! T" P A% T2 X
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
* s8 f0 u2 J! t6 S: p1 t1 g
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) b* A8 V4 P* s) S
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
$ _+ a' N* }' i- z
' k A0 D7 o3 Q7 v) L. l
/*等待UPP传输完毕*/
7 I) F* @# W+ f$ x! [
//i=0;
7 a: i, Y$ @' E0 k, v% l
//j=0;
$ A* L2 \+ n" h1 C/ F
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
. P3 j. r' X# z2 v4 M# N# Z
{
: N8 `9 M# [5 {0 U5 H3 _
/* 测试UPP传输的同时操作普通DDR数据
1 L3 [; K! w! }) t" `
temp
=i;
& @, }( I0 r r8 z8 V4 V0 K" W
i++;
8 y0 F4 n, ~ h" v! U) d _
if(i==1024)
1 \1 G' U1 R8 D8 t( E7 y1 l
{
9 ?- K$ a( ?& G/ S; i3 z% L$ e% w
i=0;
5 ~( d6 U! g7 ?! B
j++;
( y {, Z8 W/ f2 Y( L4 z+ C
}
* ?* d0 E3 z% H& \5 @- p& x& N7 N% v" A
*/
% k* x8 d0 W6 G
6 J3 q. \8 J, \% Z7 G
asm(" nop");
( d9 Z2 @4 [4 r: w) U% u* Q
+ O& |! a# g% e/ Y' b% R, W/ U
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
% C L+ L7 d3 M6 W! m% X5 |
}
8 d" v* o3 W* t# [2 U2 z9 J
/ u( Z; I+ |# X, n
/*检查UPP传输的数据是否正确 (loopback modes only)*/
, I: t. R; g y+ ]* ]) m
//UARTprintf( "i=%d\n",i);
& o4 m' N7 c8 _
//UARTprintf( "j=%d\n",j);
9 |2 u7 U7 z/ k* V! k% A
UARTPuts("Data mismatch in buffers.\n",-2);
T2 q* F7 D! u: ^
if (upp_interrupt_count == 2 && upp_error_count == 0)
* V* n, f0 \5 |
{
: p& S+ W8 Y8 _7 g8 w9 f2 q# A
for (i = 0; i<upp_frame_size; i++)
) \1 j9 \- s# H, V# U9 |
{
! g3 N, t5 l- c; _2 G
if (upp_buffer_a
!= upp_buffer_b
)
: c9 Q2 }) e( x7 R6 A; V
{
/ @; \ A% S6 B0 V9 u; e
upp_error_count++;
. H, ?1 R$ B! b8 d* t4 l
}
t q3 s" T0 Z* F; P. R6 I
}
0 V6 U; T. s4 J! O
}
; A3 S8 S9 S" s2 t
8 q; Y/ a7 y2 t+ v: b ]9 N; A
/* 报告通信结果*/
* D# m l9 q# v7 M$ B! C- @6 w5 F
if(upp_error_count != 0)
' n% D5 W1 a; E& e) |# H1 z& v& ?
UARTprintf( "upp_error_count=%d\n",upp_error_count);
' T& H! y! g% u
else
' c/ B0 E: u$ F6 [# [6 i9 Q8 t
UARTPuts("uPP transfers complete!\n",-2);
, P( G1 u [* @
& l& Z, T: t: V5 H7 c# B
UARTPuts("Do you want to print all the data?(y/n) ",-2);
/ j5 p; [6 T9 \3 t8 g: ^) d
UARTGets(ch,2);
+ n' a. N0 i K- V" |# x( _4 F+ w B ?
UARTPuts("\n", -2);
i+ V- w% S, |" q
# U8 n3 P8 Y5 h m5 p3 W
if(ch[0] == 'y')
" |" i8 Z, Y0 ]8 h+ ^' Z
{
0 I; y0 `. [" R1 N
/*打印全部读到的数据*/
" e) J5 N8 g; P; y
for(i=0; i<upp_frame_size; )
. Q/ \' N5 C( z4 e
{
& E$ ^7 Q! ~4 c' V; q
for(j=0; j<5; j++)
) H( ^ D7 P& T9 P3 z* I
{
: d6 J T- H) d. g' a% B
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
& W4 z; \" u9 K) E j8 p6 u! \, g
i++;
3 B# p' k) p( t4 Q* q2 T
//if(i >= 4096)
) q) w$ D* j- d3 w6 e% f* }" D# w
// break;
/ R. E" e) a5 y+ c0 f
) V$ B9 f/ z8 U% e. l
}
( W/ ]9 t) r* B1 V- Q E
UARTPuts("\n",-2);
9 U( W3 L! _. n5 B4 ^. m
}
+ E! F: G5 V( V2 }# F. R$ ^
}
' I) m* D, F, f: M% L
3 w5 S! `; k4 m* h& U3 l
}
8 ~+ {: J4 n2 P& k
' }, X. S g8 f" d. @0 L0 T
, K$ ]1 t3 R. m' @$ f" y! i
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
2 H1 ?: V ?% f8 p, K+ Y9 n+ V
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
' A, T- B! W" b" m' p6 m3 t
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4