嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
1 W! F" _0 t, d6 A4 ]/ `. w0 {# A
Void UPP_TASK(Void)
/ F$ n5 M1 Q. u* P" |; s
{
* `6 T9 |. Z1 H7 H( P6 z
( n0 ~& g0 C1 e, K) h, Z
int i,j,k,target_int_count=2;
! H7 ]# ~3 W* i0 }6 s# j6 N
char ch[2];
9 t' t9 c7 y% v! N4 u
% J. U8 j: V) e2 v
; E3 k" w& g c9 h) o: E( Y
$ _! T8 K) y8 C f9 |5 R
upp_interrupt_count = 0;
* @3 v$ M$ C4 c! E- C/ D
upp_error_count = 0;
& i H8 g5 l3 }: L3 ?
" X8 _6 }# j6 k4 ]
UARTPuts("\tResetting uPP buffers...\r\n",-2);
. ^3 z' ?7 m: I
// Initialize data buffers
S7 t- k9 S! G/ @# R7 I
for (i = 0; i < upp_frame_size; i++)
0 \- L4 o, A3 d! m# S& a
{
# s4 `' |5 q5 N- ? m
upp_buffer_b
=i;
' V+ [5 n# w, k
upp_buffer_a
= 0xDEAD;
+ O! X) N8 C) `+ i
}
7 c/ d9 h1 p% ^# A
$ h# o; y# _- M" i! h7 |4 U
//for(i=0;i<1024;i++)
" R3 H0 f% a2 c) U: _
// temp
=0;
* B) q5 x& P2 p8 _7 m% ^
" L/ V% Y7 t* C. A( m' m
//UPPReset();
& J3 |1 d! }% q% L: Q: V* G [+ n
/*启动UPP DMA传输*/
+ Q" w0 s1 l v
UARTPuts("upp_prog_dma_i\n",-2);
' [& R" g* p/ h( u
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
t/ H( Q$ o. G& A* i8 I4 [+ p" c8 a2 n
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ U2 i9 O5 Z3 K* L
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
" T" g3 d0 i0 V' v" {# m/ Z- Y1 Y
- @/ j* h8 M& h% b; \
UARTPuts("upp_prog_dma_i\n",-2);
( d1 _2 p" k# F+ B9 C, f
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
8 o( v% H- \* u3 C7 ]. I% _
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 H0 M2 O5 l Z; _! V% [% y
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
( Q* B* P0 |6 z: X6 y% @
) L- B6 n/ r) f5 }# p* I
/*等待UPP传输完毕*/
' A4 G/ n4 Z+ e9 \3 [8 U: j/ S( y5 i
//i=0;
" V/ i: e8 k- W/ s' C3 @# s
//j=0;
! Y9 M( c/ D; W
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
$ s r' Z* |% m9 r7 {
{
+ t, o& x, }# v& i# c7 t: R* h8 D
/* 测试UPP传输的同时操作普通DDR数据
m4 X# r. `7 G( q" H2 C2 V1 N# u) I
temp
=i;
l2 ~2 F. M+ m
i++;
. X/ R( Y; j9 m, c/ z
if(i==1024)
8 Z4 ?: l5 h* t! B5 M2 L/ U
{
0 Z8 P5 Y, q0 \% Q- U4 w' L' [
i=0;
; P' U, n/ a' t2 e0 J- G/ K$ ^
j++;
* h9 e" y( R" c( s1 s
}
& ^6 m# b) T) M% }- u6 U: G1 H' c
*/
% H/ u# K, h2 ^9 e2 p1 V. _
- J* u3 f# ?- P$ T3 c Q
asm(" nop");
* y3 Q/ v5 C: _' V
& a' N' ]% @ e) d4 q% `( i
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
. l8 \3 w% n7 z6 k. V. p- V
}
; }" W6 j) h8 M2 d4 c
- q& K; X4 z7 W0 ~6 x* B
/*检查UPP传输的数据是否正确 (loopback modes only)*/
7 y/ H" @" x8 F; O7 W+ w* g) M( e$ @
//UARTprintf( "i=%d\n",i);
g( H' d' B5 d( r% R6 p; z2 Y
//UARTprintf( "j=%d\n",j);
0 R% ^% }7 @8 U8 }: p: Z
UARTPuts("Data mismatch in buffers.\n",-2);
/ v! w4 D$ a1 y
if (upp_interrupt_count == 2 && upp_error_count == 0)
) W/ K4 U* r) `* f5 a1 z9 A: e+ [
{
; V! Z# r3 W7 x6 m1 N$ S
for (i = 0; i<upp_frame_size; i++)
1 l; T" M" [2 v# h8 r- ~
{
0 E K* B! c2 V! L6 ]
if (upp_buffer_a
!= upp_buffer_b
)
+ Q- l; J: l6 y% \" ~
{
$ v! y! u3 Z1 G: c9 }- m, j* t
upp_error_count++;
* Q' A- R5 y1 ~; l; O1 O6 t
}
5 C0 J& g! l1 p. Y! }8 n4 d5 x
}
! s5 n) V9 I5 G: A
}
* w- B2 U0 o% o; r- @4 y: L
* [3 d) [: o% B: M# z
/* 报告通信结果*/
3 `% f ]! E& ~. D4 C9 j
if(upp_error_count != 0)
" Q: v% H9 T' z" b Q9 N! n
UARTprintf( "upp_error_count=%d\n",upp_error_count);
0 P: w, v* ?6 N v2 G: P- B2 K
else
# G, s/ R3 `0 _3 V* k
UARTPuts("uPP transfers complete!\n",-2);
# e/ x! T; U+ o+ i3 Q
`( E: O$ e8 `, h6 R/ K7 S
UARTPuts("Do you want to print all the data?(y/n) ",-2);
% D3 k6 d( T: f( c4 ~$ p; E1 d4 ~
UARTGets(ch,2);
" ]! ]: Z( Z4 \$ v; G* j
UARTPuts("\n", -2);
! o) |2 d" a% e) o' s* s0 [
7 Q) _8 B" H' ]2 E
if(ch[0] == 'y')
/ R3 L- C6 |' ?* O
{
5 P5 o0 q! O0 d$ _$ D
/*打印全部读到的数据*/
3 } T k$ S( p; I
for(i=0; i<upp_frame_size; )
6 g0 Q% ^3 z, ]# u8 \
{
' [/ G% j8 i# g
for(j=0; j<5; j++)
% O7 z" Z+ K8 t- m2 z
{
, C4 J) u! H: B: T- B
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
4 X2 _/ o1 ^6 A+ a; ~9 G
i++;
, M' f% f' {- |5 c
//if(i >= 4096)
, d2 L- J6 b* H' O) j: f3 `
// break;
8 O1 B3 V/ f% l9 F9 `4 ~, v
6 c4 U, i h6 z3 [
}
% ^$ h, Q8 r5 R
UARTPuts("\n",-2);
+ ]6 x3 ~- @3 g2 E7 r; B o
}
* M! N4 Q& Z+ Z9 F7 f" P
}
; M: e4 q3 K8 H0 d
% M% S9 a; e; i! _! a0 q& d
}
. T& b3 N( e! `9 q- Q" ~0 Z, h
3 Q" J/ _1 O' F3 b% \
' f& V Q4 I" i# \9 u
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
5 P4 C5 m1 c5 s
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
7 \ s5 e+ i/ h* F* S
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4