嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
8 e- |- P$ |- r
Void UPP_TASK(Void)
1 B+ v9 ?1 f" X$ n0 @
{
8 m7 y9 \7 f$ T: W! l, _: M: D9 q
0 i; f+ i! d* q9 j
int i,j,k,target_int_count=2;
; D# h& E# X' D# w$ Q" f
char ch[2];
4 A2 t! {' O# R* F" ?% I- R# r
+ _5 Q ^% _' f. ~( }& o6 U
. L3 ]0 R, Y8 B) }' f: W
, A' `6 n. Q/ @
upp_interrupt_count = 0;
+ i' m0 |' A" {6 @5 b
upp_error_count = 0;
, ^/ G" H2 S$ |0 X
; ~1 F1 x# X+ T$ U2 l- E2 Q! `
UARTPuts("\tResetting uPP buffers...\r\n",-2);
4 k. F1 x" j: b1 i! G
// Initialize data buffers
/ v& z, u& z& c. _) o! {# n
for (i = 0; i < upp_frame_size; i++)
- H! g% ~3 B- Z% M m+ G. \2 U
{
% |$ o4 i) n9 O: m
upp_buffer_b
=i;
9 v! j k; L( C, H* e w
upp_buffer_a
= 0xDEAD;
/ f* }0 u& `5 A8 _( Y4 {9 Z
}
. B4 r5 A* B$ Z$ o
1 U! _9 \& p- t; t$ w) P
//for(i=0;i<1024;i++)
; h- {9 b/ z4 ?7 ~
// temp
=0;
3 u' ?0 ?* J$ J2 g% m
; \* ^* K' Y: s9 k7 Z! h
//UPPReset();
/ t1 S6 I: Y; O, O. Y
/*启动UPP DMA传输*/
7 F& K; ]# C8 e9 \ R( Z
UARTPuts("upp_prog_dma_i\n",-2);
) {+ L8 I3 Z& m$ {; w. A; g' s
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
, j8 x9 L$ w3 Z4 e- ~4 G* O( E
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; q% x8 E! Q( B$ _/ q* n( C
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
9 Q( G" C6 w3 w
7 P+ s) D/ P V& _* j: q; m
UARTPuts("upp_prog_dma_i\n",-2);
; y6 H6 u( `+ Q/ p2 \
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
" X# c' v! h- E# t; A
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% ^9 F, q: m: x: m
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
2 h- j" Z* o2 V/ D7 R
6 }# R. a/ E: u: z% N7 D
/*等待UPP传输完毕*/
6 a) X8 D9 w" d, w! n0 L* n
//i=0;
. I; b* z0 ?9 R5 g6 e! E+ s8 h
//j=0;
/ A' P2 ~& C9 q6 G; g4 y+ m/ @9 T
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
& P4 g" V6 g# M6 a/ R* x2 G2 F
{
* e. p/ B0 G8 v `3 y
/* 测试UPP传输的同时操作普通DDR数据
. d' [8 M( o/ b
temp
=i;
: |& ~+ l' x9 t' w
i++;
8 w+ |7 T9 `" J+ U
if(i==1024)
' N$ Y) \# K8 s b. U( E( I- t
{
' v; E% D3 ?0 {
i=0;
1 |% q9 H, C, a) @8 f' P2 L6 V
j++;
: a0 W7 }' u1 K/ C* b1 q7 l
}
- Y5 L/ b; ~. M6 y( A- ^; A
*/
5 p+ e7 ~! J1 Q. e6 z& a$ Z; y. i
/ j x& I. G$ r: C# x
asm(" nop");
; t% t6 U* h8 }/ C
% P. n# X' n: p
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
4 A4 \. o/ @4 c" D8 A
}
/ B" _. n- E, p, ?' S4 `
2 B$ H2 r: X* g1 m
/*检查UPP传输的数据是否正确 (loopback modes only)*/
) `* r7 S: B- X5 B4 \6 _
//UARTprintf( "i=%d\n",i);
2 \! y: i- V( ^1 K! K" P/ |
//UARTprintf( "j=%d\n",j);
# I) [7 b3 r5 O0 L! e
UARTPuts("Data mismatch in buffers.\n",-2);
8 X) ~+ O9 l, [$ c- q% ~
if (upp_interrupt_count == 2 && upp_error_count == 0)
* U' t k/ v: y% n5 |; z; z
{
, j( V* y& T; O: I5 y
for (i = 0; i<upp_frame_size; i++)
7 ? U! i, E. D: e2 T( ]5 c
{
( Q/ h* ]1 \% c7 F" Z9 M- }4 m& u6 q
if (upp_buffer_a
!= upp_buffer_b
)
' ]4 R0 L. c; _+ U5 ~ q$ i5 I: {+ n( x
{
1 q7 n$ m) J1 b: h" J
upp_error_count++;
\' l' h; S4 e; Q( t, ]5 D( w
}
7 P1 y7 ~7 @$ F0 W; t; Q2 `; f
}
. Q6 G r5 O7 S& G$ E3 b2 a
}
Q2 r: d7 t3 S' J8 a
% S7 \* i1 Q6 n' `" v. s
/* 报告通信结果*/
/ b( t! z% _6 K
if(upp_error_count != 0)
]7 Z. e u; c3 I
UARTprintf( "upp_error_count=%d\n",upp_error_count);
, ?* a( L. a9 e3 {0 @* y$ V9 E6 B O
else
/ J, O( N9 @* C7 l, w. l' o) ^
UARTPuts("uPP transfers complete!\n",-2);
: Q t! R" q2 P3 u, d
) o# y0 I: {! s& M2 P) Q
UARTPuts("Do you want to print all the data?(y/n) ",-2);
+ O2 D0 g# C# c C$ a; p% k! C
UARTGets(ch,2);
" o+ K$ J6 e9 h( j, i' i3 J: g5 B2 v
UARTPuts("\n", -2);
5 l& T. B1 p) g( W
: L2 Q. I2 i; e3 }' q
if(ch[0] == 'y')
w0 K4 q- c: S$ D7 y+ i- Y
{
9 q Z, p" ]5 @# L8 V9 G0 C# `4 J
/*打印全部读到的数据*/
" N+ q: z7 l& v$ C
for(i=0; i<upp_frame_size; )
% D; j4 {8 l0 M' B
{
2 v1 B1 U- A# r" H
for(j=0; j<5; j++)
) \, J- D! X3 D( u+ d o: e
{
`% a* D$ ^4 O& e4 r
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
0 s0 s9 t$ U4 ~3 ]; O; j
i++;
8 p# v8 J+ N2 N) W
//if(i >= 4096)
+ X5 b" B1 H- ]8 L! |
// break;
* q: A* r* H: W( n, p5 _' L$ w w6 ?0 x
, G; ~% g1 f$ P# t6 C0 v. P
}
3 H, y( u: \: e: O ^! S6 v' U) e& j
UARTPuts("\n",-2);
0 Q3 B+ |! Y$ F% m( e4 \% Z' R; v
}
c% b& v j+ V( u* R
}
" u% j* V1 L$ W4 D `9 K1 R
* m1 t+ i9 i! n
}
% k/ c' j" M7 s( i9 s
' ]7 k& i! l) m- Y P5 H( E3 |
2 A- R1 t; l w5 F/ O5 t
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
6 f. H) N! H0 q+ A
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
6 }! h5 h- j. I6 j2 Q0 b+ t
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4