嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
9 {! K, X7 O3 c+ A
Void UPP_TASK(Void)
, K3 G2 L; U; J
{
* X# E9 g4 s r. p! u. r# A2 u
$ f8 h, p2 `+ v5 e: t) \
int i,j,k,target_int_count=2;
1 K. f7 K5 ^( G
char ch[2];
6 k# Y. o' I1 _# J
2 [ g7 s% @% J/ R' K3 T
( w- i+ h* H. j% U. d) `0 F4 F
2 ?6 [, a `' }* p
upp_interrupt_count = 0;
4 \2 G& V/ ?" h, `
upp_error_count = 0;
. v! ~8 z5 f3 e. `+ c
9 O3 w9 T9 q( t+ c4 M/ M
UARTPuts("\tResetting uPP buffers...\r\n",-2);
6 w" f( E. h0 }% h( t
// Initialize data buffers
! J; L: g) l/ _9 l
for (i = 0; i < upp_frame_size; i++)
7 C0 H8 c. N' w
{
6 r( U" Z: T; s; `/ G/ }2 q3 p
upp_buffer_b
=i;
, B% {* V. M0 d2 ~ U- G9 T/ l
upp_buffer_a
= 0xDEAD;
, H# ]4 c+ R" S
}
: [# ^- S0 T; e W }
. Q* y& F& h( r
//for(i=0;i<1024;i++)
6 J* H* W) a! x; P
// temp
=0;
) a# F$ v( X6 \# L
' E7 L+ D% X# r$ X6 a6 V
//UPPReset();
8 }5 G/ N* B( ~
/*启动UPP DMA传输*/
# J5 Y9 D8 T: ^' d, P
UARTPuts("upp_prog_dma_i\n",-2);
4 n* N9 S5 J% c
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% u' n* l ^" p7 N4 C
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! w( f7 _; R* F, I; s8 N
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
" b1 p; B- I# d2 }' {
/ g1 j, \- ]% v4 H, z4 u7 r2 `" \
UARTPuts("upp_prog_dma_i\n",-2);
F4 J/ ] \6 a" [! P. R
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
9 l" a. u8 n& v4 H5 |2 ^: h
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* a6 E6 H) A3 N- z z) }( N" l
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
6 O* \* E3 W# c) |$ T
3 ^ r+ i3 ~! J
/*等待UPP传输完毕*/
, E9 j9 Z( _7 l! q$ f
//i=0;
9 j7 I" H6 O. [: ~3 \( \
//j=0;
9 `! {' B h" F1 `4 m0 }
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
# E- S+ [3 L4 X2 p' D1 W! S
{
1 m8 Q2 `) v2 C/ h3 X
/* 测试UPP传输的同时操作普通DDR数据
5 b+ S& R* `: m f; J5 f
temp
=i;
3 a1 q% N5 f3 W( J0 P, Z. c; x
i++;
: g% b% G% L& K6 H7 c! M
if(i==1024)
" Z$ B* [6 V$ k. Y
{
u0 G: T. q% m" V; y) O
i=0;
! _, L% {' f$ U' e) Z- x0 i
j++;
$ t3 ?0 Y0 s: _8 S, z/ \ g
}
2 `+ D* x3 \0 ~3 F( g
*/
. t5 ^, _, h6 U5 v) Y. T% h
9 L+ X% r) n6 i+ G& O
asm(" nop");
5 d. i" F, C7 |' T, m
9 V# m. S0 U* }7 W
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
! r0 H/ l/ W8 }, s- Y
}
) g+ e: |9 J/ R( v
1 A! F& x- e' e$ l4 K( C' \
/*检查UPP传输的数据是否正确 (loopback modes only)*/
8 A7 C& d) ]7 w
//UARTprintf( "i=%d\n",i);
1 z& |4 \3 i: G8 U% l# z
//UARTprintf( "j=%d\n",j);
% Q/ U' z1 Y U/ ~* g
UARTPuts("Data mismatch in buffers.\n",-2);
7 N& o* G) Y+ e
if (upp_interrupt_count == 2 && upp_error_count == 0)
& z8 C6 @! e8 P I
{
+ W" ?1 f7 H6 A* A
for (i = 0; i<upp_frame_size; i++)
' Z7 ]1 a' A( Y1 F j8 b
{
. B8 s. P P! G5 f4 ]
if (upp_buffer_a
!= upp_buffer_b
)
. o# i) C. h% }8 r
{
: {7 s. K" m p5 S, O
upp_error_count++;
4 y5 x3 M% |# K4 h
}
) h! W4 z/ x( A4 A0 U( N
}
1 n9 p' ^/ \1 h+ \0 F, v2 d9 l$ }
}
3 Q, _ }* K- J: |( g
9 V2 q- f/ i, F& Y
/* 报告通信结果*/
- ^& ~6 Z n9 C, Q Z0 K
if(upp_error_count != 0)
9 H: Q, E/ Y& N/ d9 T6 G n
UARTprintf( "upp_error_count=%d\n",upp_error_count);
" E; m1 f O$ x# s6 Q g) |2 z
else
8 U) N j( p8 Z' [4 s
UARTPuts("uPP transfers complete!\n",-2);
. N. P$ a+ N$ c8 @, m8 t; ]$ P; [
3 F; _: A4 F6 h" V! U# v
UARTPuts("Do you want to print all the data?(y/n) ",-2);
& W' [) r3 F. Q4 u& @4 q) ~
UARTGets(ch,2);
Y- a* W/ S8 c8 \
UARTPuts("\n", -2);
) N( L y# C6 O) f
% z' U% K1 Z1 N, N- ^; U
if(ch[0] == 'y')
, X! b& b9 @5 |1 \+ v
{
0 g h/ A& |) j* m' M2 x
/*打印全部读到的数据*/
0 K8 G4 b1 w* D/ _+ p9 u" ]
for(i=0; i<upp_frame_size; )
. ^; E- Y- P* D: G
{
+ M+ L6 b" u, r: [
for(j=0; j<5; j++)
1 K) U; q; W5 b7 X
{
9 {4 R; g/ w5 r, k
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
+ y& W( g2 z) u1 L7 T
i++;
. ]1 m4 a }2 ]" ~
//if(i >= 4096)
) X6 N( j7 X3 c% D- i) W$ g
// break;
! Z$ m9 b6 z- l6 e, s- c
& g. a5 L+ `. B- Q+ I3 T
}
( p5 v! L; U8 g( K' L
UARTPuts("\n",-2);
& H" v1 R3 d7 G1 e
}
9 L' a& _, L7 q' A( Z, _$ S
}
' K, P- t) H& M7 [
8 d- @; Q4 Z5 q: O) r& |
}
% X1 F( z1 d# V, n4 T1 K% f
+ L: w/ @6 W1 T8 p4 g4 q! E* F) w. o
1 T' ]7 j( @& p' n
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
a4 o! Z' x2 G+ a7 E9 l
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
9 B: j1 A ^. _$ Q, [
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4