嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
9 m! B M; }7 ~% p/ H
Void UPP_TASK(Void)
# T$ s. f, w; u3 [6 ~0 P
{
) t, a8 Y" a8 o/ H
9 z ^8 W s( C) x4 l- e5 d' n
int i,j,k,target_int_count=2;
$ o# Y! Z2 ?& s$ `, K5 q9 P8 F) U: o
char ch[2];
9 t/ l3 u5 A& V4 k; V( Q2 Z" ~9 P
; ~/ g, E- e+ N! I
( C4 n. S7 K$ Q6 x' X( j
/ Q6 K6 }: P/ W5 H( Z6 A
upp_interrupt_count = 0;
' n& |, _5 o9 X
upp_error_count = 0;
! E& m E- [' [+ t
8 [6 j6 z7 V. J! c% ?: a* a
UARTPuts("\tResetting uPP buffers...\r\n",-2);
7 |+ V: z/ {1 g& [* L" X0 G
// Initialize data buffers
7 B" {2 M. v7 s9 s- z; R
for (i = 0; i < upp_frame_size; i++)
1 e4 t4 ]3 M0 W3 _( `7 k$ X
{
2 |; B& f4 o' N& A3 g, J( w" F8 ^4 n
upp_buffer_b
=i;
2 z1 h5 H8 B* c
upp_buffer_a
= 0xDEAD;
6 p8 b( F: i4 G8 ?' V9 R- _
}
7 q u |+ s/ r% y2 h( M- ]
/ w2 v! ?/ D( G9 T2 S" D' W
//for(i=0;i<1024;i++)
- |, e- N0 ]: s! _% q& e& O
// temp
=0;
& S$ ^* \6 {7 j. d' `, ]
: \; `+ T% {0 m; f; v) Q
//UPPReset();
8 W5 ~: z8 ?6 T1 K% S& }
/*启动UPP DMA传输*/
" `( v2 O, N$ j' Y0 K
UARTPuts("upp_prog_dma_i\n",-2);
& p8 e" u0 `% [ l! o$ a
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
5 p4 P2 F6 E/ f; k
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" \: [0 Z3 z( Y" L5 ?
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
s9 K" J' u4 j' q/ v
; v0 q( F' H5 A l2 m8 U' L, v
UARTPuts("upp_prog_dma_i\n",-2);
. u4 [9 }9 B+ q
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
( R' h( M/ Z6 d* ^" N- V# v6 h
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 v/ L z, V2 ]" o+ u. h) n
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
: K; Q( t" z$ Q' {; G9 H, W. I
0 c4 G2 i7 R& L; y3 ]7 v
/*等待UPP传输完毕*/
& l9 q' @" t) E5 E& y) d
//i=0;
& \4 u$ w5 j1 C3 f8 }* c
//j=0;
+ `! g# T. ]2 C
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
# x" `- [) b5 a4 G) H# d+ N
{
3 L7 n! e* x" d0 N5 l: M! q
/* 测试UPP传输的同时操作普通DDR数据
/ A% T0 Q- u, d2 x+ x0 \4 s8 U
temp
=i;
5 p6 s* k9 O- ~) M1 N$ O& k
i++;
$ q4 r9 U T/ a& L. W/ S) R9 L D
if(i==1024)
( p% \! I: u+ N t+ a: g
{
9 }) ~" G9 |5 h( e
i=0;
+ ^# o% E3 m. w" i0 e8 s
j++;
5 I' G& \9 l: U8 e6 c
}
& D: h; ~. T5 p! O
*/
% a: o7 |" b% ]* r
1 [; v, J2 J* N0 ~2 e
asm(" nop");
, x# o/ ^! ]! `1 v! w5 r
- v. x: o) \' x) ]. L2 b" B2 _
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
" q( O# V3 Q/ Z0 S% I9 m8 ]9 q! q
}
- X- W! q1 F" I' E3 s) |( S
, ~3 [" ?* g: v
/*检查UPP传输的数据是否正确 (loopback modes only)*/
4 Z) _' V9 Y5 _" Q. \
//UARTprintf( "i=%d\n",i);
# n, g2 N: K0 S' c5 p
//UARTprintf( "j=%d\n",j);
% E+ J1 Z8 N' m' f, U2 ]. Y% ^
UARTPuts("Data mismatch in buffers.\n",-2);
2 L1 Y: {% _6 @) K
if (upp_interrupt_count == 2 && upp_error_count == 0)
& H' r$ r: J1 V
{
9 { T* [5 j: _1 j
for (i = 0; i<upp_frame_size; i++)
+ a; J+ \0 }0 b: E
{
0 B0 |4 [ i8 a( i# {; O: o
if (upp_buffer_a
!= upp_buffer_b
)
( m# x; P5 E5 y* i1 E& _
{
- @' H+ T& ^( J
upp_error_count++;
) T; B+ Z8 U9 X- a5 |+ h5 U
}
% I( ]) k8 ]; g! y" t l$ `
}
+ L- O# g; Y8 h9 H! x
}
, N% e5 f% S, A
) a) E) U2 e2 u; L- @
/* 报告通信结果*/
9 j4 R+ E4 a& e+ l% A' b1 G% b; A
if(upp_error_count != 0)
0 [% x s- l6 x# m) h" Y6 w+ x- U
UARTprintf( "upp_error_count=%d\n",upp_error_count);
* g8 E6 Z& n+ d
else
. r6 h$ Q5 w% ?0 j% }; I
UARTPuts("uPP transfers complete!\n",-2);
6 C% K4 O7 W2 a
2 A' ?1 N3 c' H# L
UARTPuts("Do you want to print all the data?(y/n) ",-2);
% I+ G8 ]2 R0 v" E
UARTGets(ch,2);
|8 H6 v3 v9 u) \3 v
UARTPuts("\n", -2);
J) ?4 A! e( ]" D0 D5 T4 R, i5 R
! A9 s7 L; G3 P, Z
if(ch[0] == 'y')
8 q: j+ \( K5 s" {# \
{
9 U4 U) Y+ U J! C# ~$ v7 N& Z& V7 {
/*打印全部读到的数据*/
G& |" G$ C7 _! c9 L" Z# G% M: r
for(i=0; i<upp_frame_size; )
4 @( P! P, ]8 q4 s% U0 Y
{
3 y6 }& }8 ?, R3 Z! ]1 `8 j8 g
for(j=0; j<5; j++)
' d2 K; J- x" c' M2 z( G/ ]9 s
{
9 k; Z7 A* P1 r3 ]
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
* A" V2 z1 s4 u6 _, h. J8 D
i++;
& ?- l7 w/ Y5 m% M4 g1 ~
//if(i >= 4096)
' n- ?$ X5 r/ j* Q' b% d6 o. u ^
// break;
/ t$ ^4 k( d3 D% m. w$ H% b! x6 w
; _+ V8 o0 T0 _" R
}
# @4 s+ T: G5 o8 `1 j. l
UARTPuts("\n",-2);
, u$ O+ \( X c7 V2 L- l( V5 h
}
& C( d5 t( e4 k3 M; s- J6 i- U9 P
}
3 h0 ]( x; d( i9 g. D7 ~
- d1 W2 x7 W: i; s! F5 f
}
; L& D. j8 H4 E
0 z( h; e' G9 T3 x
+ v5 V" k7 e; G
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
8 B# {( X& m. `8 }5 A, Z, k7 r
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
2 ]8 a6 z! q- v( L( G0 o% u
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4