嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
3 B; k* `' i3 U( J8 r
Void UPP_TASK(Void)
( y- k: n8 [' K. f) Z2 i* T
{
}8 z2 T, S# \7 d+ I
1 R( v* U! j) F4 |
int i,j,k,target_int_count=2;
8 _% t7 y( K# a3 t9 ?
char ch[2];
; w* O3 d# W; y8 x
+ t/ E9 ?, _3 b. j# B0 k" i, @
3 ^8 `, c8 \, A4 O. @8 \
3 t+ n' O) O# K9 C% D- O3 Z
upp_interrupt_count = 0;
/ P, L- r+ ]6 z+ d. Y- U# r
upp_error_count = 0;
1 I0 | r% c" M+ T) t U( K
' i8 H7 U7 w! ]) x% e2 @
UARTPuts("\tResetting uPP buffers...\r\n",-2);
6 q/ I) K. j x, M3 C
// Initialize data buffers
3 f/ r; q4 B) {' @
for (i = 0; i < upp_frame_size; i++)
}# |- B. W; A7 u F
{
, n2 Q6 K8 _9 L( h. n) F2 R( g
upp_buffer_b
=i;
3 o1 C% @; j' J% P0 o
upp_buffer_a
= 0xDEAD;
5 w! B# O) @' n$ y
}
3 M d6 t* x, E1 w' J$ W# ] Z5 C
9 }. L' `8 f1 q' M
//for(i=0;i<1024;i++)
+ M6 o" ? z3 ?) U' _- N: B
// temp
=0;
0 O: _( B- j) r
$ u& h3 w5 F& ^9 K$ j7 d
//UPPReset();
% T q) H( P6 u9 R8 J! F1 F' k3 x
/*启动UPP DMA传输*/
! ]( d1 N' T+ b) s
UARTPuts("upp_prog_dma_i\n",-2);
* x4 p' c1 ~1 [ X2 P q$ K
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
. D" U8 R/ f! l: i
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ ~2 K k1 r" H8 N* I# a. \
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
4 g& n. R! w6 N* E' ]$ u
4 B" A% N8 V/ v1 v+ r5 w1 x# W! G
UARTPuts("upp_prog_dma_i\n",-2);
5 G4 |$ x4 ~/ v0 W ^& Z
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
" f& ~ _: G/ s* M$ ?
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 U8 {& P% F' x& f/ i
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
, Z, S. L1 U& \) a7 c4 M
) t" {% ?& F0 u. |) g
/*等待UPP传输完毕*/
2 R% L8 q$ j; ^1 s7 z
//i=0;
; J' I7 T2 ? A; ^8 g% _6 @
//j=0;
' c5 w) V' v; M' T0 M, h6 j# g" h
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* B7 [* G ` E2 ^6 w! D+ K
{
# J* C5 q0 a L. x+ ~' n" ?
/* 测试UPP传输的同时操作普通DDR数据
! ?2 v- h5 Z- m- b
temp
=i;
A" I# g' b0 b+ A4 E6 q
i++;
' L5 G: |" E* y1 R
if(i==1024)
/ s: B% ?3 j- C$ i4 o! @0 ]! _) e; x
{
; l! s% u0 f8 F; ~, P# [
i=0;
2 p3 Y& m. _- C/ y0 O2 q9 s
j++;
X6 s" O9 K3 L" C( x
}
/ M) i- e2 h' X6 H9 f9 p5 o2 H
*/
+ a; i3 Z3 K8 u# F
7 _9 B% [- E. v2 ^# u! L! R/ N5 L
asm(" nop");
' P6 c# J8 ^& u* P' Z- p2 E
5 I" u7 }. g' S
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
. N( Z/ F3 \- N3 g( B- ?! x
}
; C, Z3 j" A. Z! [! H6 i* X
0 E, Y4 f6 i# c& E
/*检查UPP传输的数据是否正确 (loopback modes only)*/
2 P! X* d- \7 o
//UARTprintf( "i=%d\n",i);
4 t: K# u0 t& _
//UARTprintf( "j=%d\n",j);
8 p: l& i h# a) H
UARTPuts("Data mismatch in buffers.\n",-2);
3 p- w9 e' C9 J c! O0 v% i2 I
if (upp_interrupt_count == 2 && upp_error_count == 0)
/ O: O: X# v, H2 Y/ m
{
( w0 \6 X, A# U0 k7 d) H+ B6 T2 z- V& y
for (i = 0; i<upp_frame_size; i++)
$ b1 Y- d9 p" u/ W
{
* j Y6 d; J# `8 N5 ^
if (upp_buffer_a
!= upp_buffer_b
)
; o& z- v! Y6 w9 P. I% J
{
3 H* n# p5 c, V7 |9 k
upp_error_count++;
3 w& R# Z2 A% r# T$ D5 D
}
5 X& P; M1 N& [% i1 v+ E" M% q8 S
}
6 p" V5 x1 c$ F
}
3 R& {% J. F8 `* T( {: v$ t& U
( s, a* J; b5 w8 [( O2 i
/* 报告通信结果*/
! |% m5 _ ?* P
if(upp_error_count != 0)
1 F( k4 p- A1 l- A# m/ D G
UARTprintf( "upp_error_count=%d\n",upp_error_count);
) Q7 U. E2 {* Y+ h* N
else
/ q1 _4 Y. T/ i
UARTPuts("uPP transfers complete!\n",-2);
+ |" _$ ~6 G% @* q, M
# C' k5 o, l4 N n( m Q/ R8 R, N. l
UARTPuts("Do you want to print all the data?(y/n) ",-2);
* R9 T% z8 j8 X3 `2 r& g
UARTGets(ch,2);
0 E" J( }& d- u
UARTPuts("\n", -2);
7 P3 r1 I& t9 { r3 z+ [
5 G( @$ M" J6 O; X. V( \3 \: @
if(ch[0] == 'y')
; W0 E! d& g. {8 Y
{
4 g9 c# k0 v& ?) O+ m2 X
/*打印全部读到的数据*/
, y- Q. [0 i+ {3 Y4 m% P0 T
for(i=0; i<upp_frame_size; )
1 b# L1 M( N# r- I* P
{
% B! q( O; L+ ~- h ~
for(j=0; j<5; j++)
4 C1 ~6 Y5 y: r5 o$ w
{
5 Q1 H8 h4 t5 L4 ^. i
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
' k$ _/ O8 C8 \" l! u
i++;
" o4 m, Z8 O9 t; W* y
//if(i >= 4096)
. r. A% f, @3 G. Q1 ~! R
// break;
) A1 _0 A. m( Y
/ B( ^: s) @8 R+ B
}
8 G& p W4 M+ Y E3 _
UARTPuts("\n",-2);
+ x1 D9 \. V, b5 n1 K9 T
}
1 h/ r. S1 `+ l: ?" P; J5 T8 W' D
}
+ M U. o, k( `% T) {) ]
% z0 U% c: m3 X
}
9 b* _7 q, r0 c h, P) n
1 ?% w- E4 ?6 u8 `) h# M1 v) u
% Z* e5 A1 }+ z' t3 E* H" K
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
6 w+ v% ]( L( j! E8 w! S; M4 [
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
* t, k7 n6 g* J+ d0 U* d9 ]
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4