嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% F6 I4 A" v6 \( f
Void UPP_TASK(Void)
/ j. z" S: O2 y: }/ w: s
{
$ F$ c9 n6 i/ Y5 [
# ]. |' Y7 Y3 ?- m
int i,j,k,target_int_count=2;
7 B$ r7 {5 G. I' c7 H# s/ P
char ch[2];
4 e; l; I8 |$ @3 ~
9 G: y0 S+ ?3 X# A7 H
, _* ~6 p& ~6 {# F- L
6 ?7 X8 d4 k+ \0 q4 Q- J; i$ p
upp_interrupt_count = 0;
) B5 r2 e* N$ Y, q
upp_error_count = 0;
% R$ S4 l9 D+ k
7 D+ _/ x4 e! ~' U& `
UARTPuts("\tResetting uPP buffers...\r\n",-2);
* `9 b: ~0 _% h+ z
// Initialize data buffers
7 `* x) S+ ~. k8 v0 @, F1 ?, K3 V
for (i = 0; i < upp_frame_size; i++)
0 T3 T% ]; Q. D' V3 ~
{
3 M7 b# h0 M- P6 N! z
upp_buffer_b
=i;
6 C7 N0 p1 i6 y' ], q5 Y
upp_buffer_a
= 0xDEAD;
}0 J6 I" T6 p, l8 W
}
4 p6 ]9 ^- v' h( R8 b6 b! o
9 _ O6 m/ X1 F/ x
//for(i=0;i<1024;i++)
$ g, i7 s2 m5 T4 Z" A0 D
// temp
=0;
, X3 z0 O2 m! M' ~6 c& [, h
; V! _: a. X% g: ~
//UPPReset();
9 q [5 U2 U& F, d, ~/ ^' p0 i
/*启动UPP DMA传输*/
$ ^+ G! F! y5 x- s. _
UARTPuts("upp_prog_dma_i\n",-2);
& y6 P `, i, H |/ e8 H+ X6 S- F
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
+ g( i L! Z2 }. Q
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 ]( `5 O: X* ?0 c& i
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
# G' o6 X% G) O5 b8 Z- n8 p
: d6 k3 H8 ~7 U7 h$ {! W& I- ] F
UARTPuts("upp_prog_dma_i\n",-2);
, e6 c n* H5 r% _
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
' b, O. U0 A) O9 M
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' o" o# I9 R* {0 V R0 I
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
! X5 [! p0 |# v' t+ g- o
* \+ G3 e: j8 j1 n2 C
/*等待UPP传输完毕*/
4 O0 O7 g3 j2 G" r+ `: {! h E
//i=0;
: I) L9 b3 U; Z- O2 ~: H
//j=0;
/ ?) ?) }2 \( m0 `- c7 @
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
, h# Q0 H( z0 `1 p- R" f
{
8 z1 L; `. B+ V1 E* {- S" d
/* 测试UPP传输的同时操作普通DDR数据
3 Q8 e/ h0 Z5 J$ K( B l6 I# _& r7 h
temp
=i;
/ Z& M; ]) b; j- O8 \! e+ z
i++;
. c& P; b) c$ q: [6 w+ F
if(i==1024)
6 c5 K ^% l& \# c6 {8 u& M' o- \
{
M$ c$ i* X" J6 V
i=0;
: O& }2 A/ L' u e* j/ d7 C
j++;
& ?# w3 { ^* F m7 ]* Q
}
! d* u: n9 Z) q4 H% E0 H
*/
: M) d& u% E! n, |/ k: N3 o
$ n4 L+ A$ |: R" I
asm(" nop");
( m) T$ }+ w/ r( {
4 r% W3 q6 V4 R; q5 N% F
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
0 u. L' s: E) A1 ]& p$ F
}
9 _0 N2 Y, e' {1 O9 S D `
9 |, J' e K+ i7 ]6 D3 l/ { m
/*检查UPP传输的数据是否正确 (loopback modes only)*/
5 R: {! d5 m3 B; j% O
//UARTprintf( "i=%d\n",i);
s/ v. ~; `7 E1 U" f; |
//UARTprintf( "j=%d\n",j);
+ J/ I' J+ \- B, C* |
UARTPuts("Data mismatch in buffers.\n",-2);
, k! n, U% q& l2 v) p2 \
if (upp_interrupt_count == 2 && upp_error_count == 0)
3 p& B$ k* k3 y2 H
{
9 G7 Z9 ^4 \$ A9 v6 G. u! s
for (i = 0; i<upp_frame_size; i++)
& Q; A/ e7 u) k7 t" |$ q: T2 r! x$ Q& T
{
1 o) r! {" n; x+ e! N* z: b1 h$ a
if (upp_buffer_a
!= upp_buffer_b
)
% c2 ~4 i9 u8 j: Z2 R; P( u( N! q
{
- v; x+ E F9 ^- L, X
upp_error_count++;
& C; B* ?9 j1 Y; o8 E& `
}
' q- F* K2 W; M, V
}
9 l! a8 D- D3 d% ^
}
, Q+ P& f' n& p
* m% i9 B4 J8 y" }9 P
/* 报告通信结果*/
' M- B2 a/ o* A0 J5 t i
if(upp_error_count != 0)
% h: I* A) y; ^# {6 R3 K
UARTprintf( "upp_error_count=%d\n",upp_error_count);
2 h, b- ]5 K: r: T1 u( A
else
7 B7 R' ?- l& k3 o8 a3 ?
UARTPuts("uPP transfers complete!\n",-2);
% J' ?4 n& S! Q; O
( R4 T1 o" _) _5 w+ d6 i/ M; A
UARTPuts("Do you want to print all the data?(y/n) ",-2);
* N& ?5 k1 j; C5 H1 T
UARTGets(ch,2);
9 m' E' L6 e' V& h( r1 S- J7 i1 a
UARTPuts("\n", -2);
6 b9 i7 U* j8 r$ G# b& I) R
. a) ]9 u) P, ~$ {7 b2 f
if(ch[0] == 'y')
2 }/ H% p! E& T$ ]; h
{
3 V& M" m7 y1 ]1 K0 G
/*打印全部读到的数据*/
8 e5 p' B; @; N4 R: V0 m
for(i=0; i<upp_frame_size; )
3 j( M1 P1 N2 T- {8 T
{
# c. ~% k7 ]" C ]% ~
for(j=0; j<5; j++)
' A$ j/ d9 o3 B- E5 `0 I6 o4 ?
{
2 }: _! h& ^5 ]
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
7 e8 l2 E' q2 u8 | J- u: t6 w2 }
i++;
' n1 p2 e$ | z
//if(i >= 4096)
" d T/ R9 y# b1 F- w6 c7 @
// break;
% c! s H( O- m" m% r/ \4 k
7 B& D8 A9 `3 H$ a
}
; \3 F0 H& D' @/ s
UARTPuts("\n",-2);
3 A- z" ~! [+ q2 D
}
7 b& Q4 ~1 Z4 _4 P1 j3 [; @
}
) O5 q+ u; f ?2 S8 T; O! H4 L/ R
+ K( O1 t$ _" [- D# p7 J% n
}
, s: Q$ x# E# X$ [* W
. ?, q) q! `) B+ p, Q. T$ d6 e
4 k% ^8 S+ I! i ]; [$ d
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
7 ?* ]2 D' [; A/ Y5 O k+ S
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
" V" X# n8 K9 ^; g" v3 I8 B+ T
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4