嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
' Y. r3 G5 r) F
Void UPP_TASK(Void)
6 K+ L$ |! t. K
{
- M! X/ Z; \. g* R
9 f' M7 n* o2 C3 ~
int i,j,k,target_int_count=2;
+ h, j5 t4 O7 y8 ? Z
char ch[2];
5 {# K0 B" ?+ v1 K, j" ]5 K6 {9 Q
5 G; {6 t; l& y$ G) P
8 `8 H# u7 [* u; j0 P4 U
& @% a% y0 u7 |
upp_interrupt_count = 0;
" W. P0 v/ }2 O" K$ n
upp_error_count = 0;
+ _* t7 }/ T/ `9 y2 W2 ]7 Q
2 Z& n) V5 A3 p( d9 z
UARTPuts("\tResetting uPP buffers...\r\n",-2);
) i: U, f8 s6 u2 E$ G. F
// Initialize data buffers
. X4 A9 A% \0 C( z7 _
for (i = 0; i < upp_frame_size; i++)
! @2 U* z w/ p% t' [
{
4 z% v0 A, B- J* S: t1 C$ e4 T" y' {
upp_buffer_b
=i;
/ K' e$ Q* |; V: E% k5 h b1 F, l, B& ]
upp_buffer_a
= 0xDEAD;
3 O- K3 e" O7 x9 X
}
# |' I; }" N6 J7 }
$ U9 C# A9 n. z! R( x
//for(i=0;i<1024;i++)
" o! T9 A( M; i. t+ P% z
// temp
=0;
1 ~# X q. @+ F
( l, h' l- Q: l+ Q2 e0 h
//UPPReset();
& K1 i. s# K+ @4 x
/*启动UPP DMA传输*/
8 d' `* [* Q* X$ W4 O1 d
UARTPuts("upp_prog_dma_i\n",-2);
. y' C3 I- U$ q5 o) b
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
* Q; L) c$ ?& ?* p/ Y9 U
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ M0 U6 X1 a7 v( c/ R+ K6 p
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
9 \+ R( ?2 ^. J
" W5 U s0 [) I/ I* S3 Y& e u# ?
UARTPuts("upp_prog_dma_i\n",-2);
& i' Q6 F1 [- Z% _$ k
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
& }# B: y. |! H3 ^$ v; Z6 n3 v7 X" M
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: v- s* X, h. G- w/ H
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
. ~: x. H3 q% C9 H5 O9 K2 J3 D
' y4 T5 g& d6 x7 g |
/*等待UPP传输完毕*/
; k, ~4 T' u+ ~5 r0 R0 |
//i=0;
0 C: w S8 ~- p! d" \
//j=0;
) I+ \7 S: \& A* l4 M5 f0 H6 \. q
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
0 Z- e( U, A" l- e
{
! A. ` k, s `. A/ G" P* L+ P- ?
/* 测试UPP传输的同时操作普通DDR数据
* s% d* U2 w# }5 W
temp
=i;
7 S# V7 U" e5 K: Q& _, x( \4 e
i++;
" k N8 m3 W) c) }5 V; M
if(i==1024)
: z) h0 V. K# [
{
# h* g ?4 J! g* Y$ t7 H
i=0;
9 ]6 m) P5 \" ?+ E
j++;
, i6 A6 H8 L' A; E
}
! y* k$ E" N7 w* r- Y3 U5 A
*/
- t1 n) O9 T" j
1 R c9 d, L6 i5 B6 }( ^
asm(" nop");
; N3 i4 d) f2 P3 \! c* c
5 ]6 N' j. S" _
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
! U/ b* q/ A6 Z$ ?: j4 \
}
6 [$ o/ P5 r/ Y$ }$ j
% |# M0 ^- p3 z+ C9 H( {, l2 m: s
/*检查UPP传输的数据是否正确 (loopback modes only)*/
6 {8 r @: I$ P3 D; m7 y" P
//UARTprintf( "i=%d\n",i);
; q- r$ p1 t% z j% D0 ^
//UARTprintf( "j=%d\n",j);
0 c, \# c. j }$ S Z3 q
UARTPuts("Data mismatch in buffers.\n",-2);
& i4 R$ f: |4 F7 u
if (upp_interrupt_count == 2 && upp_error_count == 0)
6 W" o/ Y# r) M' ]* ~
{
, O, J& ]6 ]9 ?; o4 u# l+ M% Q
for (i = 0; i<upp_frame_size; i++)
. ^ T/ ^: i J* r1 D3 X
{
* c' e% z) a& Q& |. `$ u5 P4 ?' O
if (upp_buffer_a
!= upp_buffer_b
)
$ j0 f. r+ q% Z( C
{
n W( \+ U% _1 o5 k
upp_error_count++;
) X- v- f$ n- H% k3 [& y" H8 h6 T
}
+ o$ C& x, m' l+ K4 u" i
}
# z F( m& W0 e/ N! {2 z/ c
}
2 a( c! [: K" R1 u+ ]
- c$ Y! D9 Y0 f2 t9 h$ e
/* 报告通信结果*/
' q& l8 U A3 F+ G: Y
if(upp_error_count != 0)
f( D2 X* N E( {+ e) m% R
UARTprintf( "upp_error_count=%d\n",upp_error_count);
2 A& j! H: I$ @& @
else
5 i8 p( P$ h8 O' y" b" X
UARTPuts("uPP transfers complete!\n",-2);
; _6 }, j' \! _
: }4 l; x& e% |5 g
UARTPuts("Do you want to print all the data?(y/n) ",-2);
* r% G5 @3 O( j9 w6 [% M
UARTGets(ch,2);
/ s. m5 O8 J0 Y. E( O3 u
UARTPuts("\n", -2);
* V j9 `: g/ t
( C5 q* W) d" R* k! K6 i* g; _: q
if(ch[0] == 'y')
5 h- P9 `; S4 ^0 ]3 X
{
* r& `4 I; P* k9 [
/*打印全部读到的数据*/
. z5 j% R+ V$ T4 ~
for(i=0; i<upp_frame_size; )
# I' T# l0 C4 K; f; y1 x/ L
{
+ ^& N# i# B0 c6 X d1 `& a+ r6 {
for(j=0; j<5; j++)
. u( ?3 n* W7 u- ?4 l. I( n+ g
{
, L0 f/ ]. b5 K/ u
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
# v/ v9 d3 J; y& ~1 @
i++;
) L8 Y* O/ S7 `/ N' V% x
//if(i >= 4096)
: k$ S! N8 i2 [# Q( _3 E
// break;
5 u( v3 p0 e" W/ F: v4 R' U: B
% @$ M2 ?1 C" Q5 j6 x7 w+ f
}
0 w# a6 W* e( D+ L+ Q
UARTPuts("\n",-2);
! b* T. ^ f* ?1 D; ~
}
. V$ I# N& s; n9 }7 b
}
$ o' a8 b! o u( Z" }- U
8 h& k/ E% l2 K% E4 I
}
# y3 P! \2 J: {* n
( B0 b0 b3 ^" _. {' L! }; \# o O
( p( D9 }) z' a9 X! ?, f& h
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
1 Z8 y: m0 }1 ]
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
1 k7 a! ~- V2 P q+ C8 h
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4