嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
/ f0 S& f6 `: d+ q) F% l: Z/ o; |
Void UPP_TASK(Void)
! H! w# A) [* H% a
{
$ N0 k" f! u# m2 z L
) X3 v9 i" X% R# c0 W( ]* o
int i,j,k,target_int_count=2;
/ F, l9 c; {+ {, e( ?/ s) [
char ch[2];
. z& C* `+ w$ v0 Y% q
8 _ X, m2 B+ A
[# _ \. ?# X' w
0 G, X( c v" g
upp_interrupt_count = 0;
; Z5 ]7 d9 {( C" p
upp_error_count = 0;
" j6 g, z1 v8 a& ]% S
8 H9 j5 L* ^: U y; G1 C, g
UARTPuts("\tResetting uPP buffers...\r\n",-2);
" ?9 Q! N( s4 V) O9 j3 \' [
// Initialize data buffers
E- Q+ [5 w$ _* q, m- v: `
for (i = 0; i < upp_frame_size; i++)
9 v C; D& R* Z4 N/ j- l# u
{
/ V/ p, d. U( K1 | o$ {4 B1 e7 q1 z
upp_buffer_b
=i;
% W& @/ H& i( t) p+ B
upp_buffer_a
= 0xDEAD;
( ^) l4 e+ t5 t0 X1 v3 `2 @
}
9 G; J8 D" L: O- c6 M
) Q& O7 h1 \; w; @3 c6 t) P
//for(i=0;i<1024;i++)
+ D" ~+ V% D4 Q' V
// temp
=0;
/ u+ ~) f! z$ a5 ^4 }$ p3 a5 a
! `8 X" O! E( X- J7 j- _8 l+ t
//UPPReset();
' X6 X/ n! T: V8 y/ L
/*启动UPP DMA传输*/
/ s' c( z$ n2 R" n" V
UARTPuts("upp_prog_dma_i\n",-2);
" M2 Q Q$ Z: c! a2 m# Z6 N$ V
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
/ A5 j! v; e% u5 h1 v1 b9 v& V3 Q
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 j* U4 R, }2 Y1 j" p# n4 \
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
0 E/ T# B. Z+ a/ Y. q/ ]; N
2 r8 h' s: A7 P9 F }+ V$ W
UARTPuts("upp_prog_dma_i\n",-2);
4 A K# j$ k+ {6 H+ t' Y
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
2 F7 R. Y' s7 H0 r3 J
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ T2 C: L! w, n2 B) w$ c( n7 j% K$ n' n/ ~
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
' ^7 N4 \) W/ z0 |+ A6 @! r8 d
) i2 v$ P( g; [' S5 ]+ ^
/*等待UPP传输完毕*/
, S$ B3 R. s% P" {
//i=0;
0 W+ N5 }% n1 ]+ d% C6 Y& v6 P
//j=0;
9 p, i5 a( O3 U) T
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
- T* d- ^; G/ T/ d& G' q, g
{
3 D0 P1 e0 s! g8 B
/* 测试UPP传输的同时操作普通DDR数据
2 d, B: t/ }; s( E
temp
=i;
6 [& X" F- J2 O$ r
i++;
( d* t' T3 l$ V1 _4 y2 v/ Y
if(i==1024)
& A B; F& {2 S( q
{
/ n p2 t! z, y! |, K: c a
i=0;
6 ]' B |" ]% _, n0 w' \1 i3 B/ r
j++;
) k9 D7 V: S6 [# C- y
}
8 S+ W1 X8 m/ x! @3 S4 r" C( H4 R) I
*/
$ j& ?/ b) e$ F8 @- T0 h
$ o6 x( {9 I; a7 U4 `5 B) C$ ]4 Z
asm(" nop");
2 n; R& j) w, ^2 R9 B6 `/ L
0 Q; m) @3 @0 |1 D2 X/ L
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
* V6 m; K( ]( z, b# D) L
}
5 A: z! j: ] x% q' R4 u& v
7 f2 ]# x* S. s! {% F# A
/*检查UPP传输的数据是否正确 (loopback modes only)*/
% N' v2 m, r6 |3 z' e7 W7 j
//UARTprintf( "i=%d\n",i);
$ B# z0 [9 `9 J' R- j' H
//UARTprintf( "j=%d\n",j);
8 t) E' u" H6 G" c0 |7 ]2 E% R' |
UARTPuts("Data mismatch in buffers.\n",-2);
- ~5 t5 x S! g& h# ^
if (upp_interrupt_count == 2 && upp_error_count == 0)
2 }8 K# s1 r) _' g/ D: n
{
4 Y+ n5 P* t7 p$ v$ v- I* a
for (i = 0; i<upp_frame_size; i++)
" s+ b/ f7 r% j4 o+ b( t
{
' [! d8 p( x" F. K! O. y
if (upp_buffer_a
!= upp_buffer_b
)
p' `" q$ W7 w; g9 M
{
# L5 B: |) n: b$ E+ H7 L6 t
upp_error_count++;
0 K. s; k1 x! T
}
" l& }0 ]! w: i, a7 q
}
" M b$ Q4 Y- k) q9 ^
}
( d3 w, ]* D) k
9 S: v# ^) m2 O+ T/ K7 E7 y
/* 报告通信结果*/
K, p3 s! p- |/ }$ g
if(upp_error_count != 0)
) e6 z9 D% n: x* L, f: _+ o
UARTprintf( "upp_error_count=%d\n",upp_error_count);
6 i. w1 B! k, l6 c
else
" u6 z8 X r0 p' a, F9 P6 y
UARTPuts("uPP transfers complete!\n",-2);
4 v1 f4 u. Q* n# L7 F8 _
g5 p5 c% A. x* H+ s
UARTPuts("Do you want to print all the data?(y/n) ",-2);
1 \! S+ R1 {2 ?5 Q
UARTGets(ch,2);
) i4 r8 n8 B' C: q- G
UARTPuts("\n", -2);
- h! W* }: D' ^% ?2 |2 n' w
1 J9 e# Y0 W( @4 {( X' L: C% I, s( ]2 C
if(ch[0] == 'y')
% ^8 w/ A+ ?! p* {$ z/ ~
{
+ s5 l, } g4 J* @# ?& q- r
/*打印全部读到的数据*/
' j! O7 V/ H+ x7 n3 ^0 V
for(i=0; i<upp_frame_size; )
! O: E; ` B) V; a+ z) l5 r) h, @4 Z
{
. R2 R& A6 q: P7 ~
for(j=0; j<5; j++)
) n( E2 E; y D, G
{
4 g/ {; J( S2 s" V/ \) z! c* d( @
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
. g1 n2 X5 {0 v1 W" n4 M0 j
i++;
0 \; C; i5 l3 t# i; E2 t1 j
//if(i >= 4096)
( E$ }2 }2 u+ o! k/ p |2 O
// break;
" o0 M7 y) ^$ g! r
5 o) d6 L% W2 I: Q
}
, f1 {0 a: ~8 U
UARTPuts("\n",-2);
5 D# \: h* R4 `
}
! c2 g3 w" E0 [- ~; i
}
/ _' R' u4 b2 D
9 K+ \, {1 N3 C9 o4 o
}
" I; b5 b8 z' i
5 h; U/ q3 x1 T9 I' L: b/ f
) _2 g$ g% q3 r. E g r7 j% G3 }
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
4 M+ V4 b/ ^/ d" ~
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
. g0 X B4 _8 T5 t* A; z" X
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4