嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ Z8 V' P, @' Z+ ?0 Q1 y$ J
Void UPP_TASK(Void)
7 r) a5 q$ ?% E
{
* e3 P% [. V% W1 D( t# N J4 v
w! U- j; j" e* o1 k1 l! q; o
int i,j,k,target_int_count=2;
: ?/ S9 m! M( F' @, n) T2 H+ E
char ch[2];
0 F" A; Z# i# ^
: z3 n6 S) O/ U8 J# X: a
6 _9 i+ k2 ^3 s r1 T
2 e8 m' T0 Y! K, ?
upp_interrupt_count = 0;
/ t6 H9 {4 |5 [& Z6 M b
upp_error_count = 0;
; {3 C5 ~7 w) y7 \8 q4 [) ~" s
$ S# m0 B o* ]2 J0 O% D# ^; H
UARTPuts("\tResetting uPP buffers...\r\n",-2);
% o( ~. @( Y1 t' r
// Initialize data buffers
" Y" `/ N/ a0 i2 X$ u9 v8 {# H8 b7 D
for (i = 0; i < upp_frame_size; i++)
. u4 B1 b& ~0 G
{
6 S3 M& H9 O6 v' c$ ?
upp_buffer_b
=i;
- K- X% e- b* O( U6 q, i/ ?6 ^
upp_buffer_a
= 0xDEAD;
1 Y. z6 w, {; @+ y2 C: j/ n# ]" N, h6 n
}
' q0 ~, I/ P9 a+ f3 r6 O' o
, s- I4 d, T- B$ X$ F: \
//for(i=0;i<1024;i++)
; u3 j; Y) w6 O( G# I
// temp
=0;
' K& y3 W) U& j! p* |3 U; z' F
5 a, m3 A+ Z; h% t3 ^) n% c
//UPPReset();
' ?7 N7 @. V9 o7 V! V9 U
/*启动UPP DMA传输*/
6 z; }( @4 [+ v4 D3 S( D( M3 c
UARTPuts("upp_prog_dma_i\n",-2);
9 Z" o2 G( _ p) c, s& \
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
4 g P* V, A" X7 C" g1 A+ x: L
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" z) m. x* B) L# U9 K7 j) L
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
! a- u, H0 J+ K* F. g `* \
0 o2 y4 y0 Z* |; u& W( c/ }
UARTPuts("upp_prog_dma_i\n",-2);
$ T' L) h! W* R, {9 P& O
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
& Z8 H1 H1 E3 b3 l8 Y" T
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: X' C# v( c1 E8 f d
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
2 D! U" E" m9 N# A' E$ _% s1 d
2 D0 }8 Z6 E5 C$ n- r
/*等待UPP传输完毕*/
* S6 n1 U( `5 c; }
//i=0;
# V+ U0 F. }- Z/ t
//j=0;
; l5 {$ `1 A6 B9 T" U0 A
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
' O# c' {3 c, ?- `
{
/ S! C' F. |* H& G3 A3 f5 A
/* 测试UPP传输的同时操作普通DDR数据
/ v+ S" B. a2 r
temp
=i;
; b: v6 K! n6 X7 z* L. T
i++;
A. a$ _1 j. B6 T1 Y$ L
if(i==1024)
0 M0 H2 l; J/ U. g
{
2 i, x/ h+ I. h) o8 N4 L
i=0;
3 N5 L$ U# q. {! t9 P
j++;
+ \0 ^/ N B" X. y' A
}
7 b0 p6 ~; i- \
*/
3 }" w$ d1 ^2 E Q* h) `
6 B) ^) Y; h; R1 F6 d( y
asm(" nop");
/ f3 D, W3 H+ L0 i' x
9 L" N# j8 v3 s- v3 h& b; f' ?& e3 e, w
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
8 c+ z; @8 G. V: h m+ l4 k
}
4 p% q A0 a% j8 ?! Q7 J
! \, V& z0 f2 F- P$ Q
/*检查UPP传输的数据是否正确 (loopback modes only)*/
# k" t$ ?7 v; ]4 K% P8 x2 ~
//UARTprintf( "i=%d\n",i);
) s n% e( m& x# l
//UARTprintf( "j=%d\n",j);
# N" I: O3 [9 [( e
UARTPuts("Data mismatch in buffers.\n",-2);
; d( e7 ^ _& S- O+ s" g
if (upp_interrupt_count == 2 && upp_error_count == 0)
0 \/ ~8 _! c# ^$ Q) `$ c' L
{
0 H3 y2 |% i: G6 W }& s
for (i = 0; i<upp_frame_size; i++)
, R3 ?# s4 f) j* Q+ y
{
. X9 w& J* K6 m- F
if (upp_buffer_a
!= upp_buffer_b
)
0 b3 x$ Q+ j6 O# ]- \3 ?
{
7 U( a& v' h2 G( z$ V
upp_error_count++;
9 Z, Z V" f# s; }* N5 N' |* _
}
' w" s1 d9 }8 y
}
7 y6 y. h4 U( h) i3 L D
}
3 `: C1 R+ h2 v/ Q2 R
9 _' y# @0 ~- r
/* 报告通信结果*/
6 ?. M- Z3 J1 H4 `
if(upp_error_count != 0)
, ^3 C8 Y4 M7 s9 W
UARTprintf( "upp_error_count=%d\n",upp_error_count);
7 w F2 R- k+ [$ X
else
; V, `' P* R0 }! {
UARTPuts("uPP transfers complete!\n",-2);
- K4 X" Y5 q/ q! @! A3 j
7 G, x: Q& p0 E( s
UARTPuts("Do you want to print all the data?(y/n) ",-2);
) B$ c" t7 w* Q! o
UARTGets(ch,2);
! Q& n8 P: y4 W1 l4 j
UARTPuts("\n", -2);
. ]0 ^4 z7 i# i) j2 |
: ~% g* d9 o2 c4 l( H4 {
if(ch[0] == 'y')
4 I7 w: F) H9 N
{
9 A- W3 X, P; j0 z
/*打印全部读到的数据*/
, d+ P0 h$ {2 A/ k) L
for(i=0; i<upp_frame_size; )
( l* p W5 ]1 u' I, {: ~
{
3 f h, e3 W* G, U7 |! P
for(j=0; j<5; j++)
& F1 o- `/ R: k% {1 Z1 i0 M
{
* h% d& p: w! G# a
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
% ?0 |5 _5 `5 `3 j7 O" N! P7 ^$ J
i++;
: W& y5 v3 I% h9 l4 W
//if(i >= 4096)
/ w9 v2 S! I) m# N
// break;
( q3 `2 s( X6 [- F& F
$ A- i2 B! p# ~
}
/ d' g5 x3 M9 y2 L) b3 z
UARTPuts("\n",-2);
. R# ~$ \: p% E; S& ?
}
5 |8 e& o' Z0 r
}
3 ~# ^* e% j1 s" Y7 g
; u3 w0 i; N+ C
}
$ H' S& W9 M0 H) E0 A* s
3 q0 V8 m; N5 k+ g" h
. Y/ W0 \ N2 N8 ]0 q1 n
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
) [# [6 c' P( O. T, F% t! {
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
4 U9 `$ n) ~! C
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4