嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
( G0 ~& I. ^5 q. C
Void UPP_TASK(Void)
4 i. V4 E# C7 U1 O
{
" y; o& n s ~! s W( c
& J7 y7 w h1 E4 ]/ j" W
int i,j,k,target_int_count=2;
6 Y4 K, }& ^" [/ A
char ch[2];
, y: n5 w, b" c! e% C/ X& i
! j, j9 r: b. V- ~
+ a4 C k5 ]2 [! e6 w; j
8 X; j+ H: w7 ?" v3 ~% n* N; D' p/ j
upp_interrupt_count = 0;
+ K3 |9 {. O- y
upp_error_count = 0;
' R6 n! G0 w1 g/ B* m- T
# \' c3 K: k" I" h0 W8 g
UARTPuts("\tResetting uPP buffers...\r\n",-2);
. B& A; ?: P* `/ w
// Initialize data buffers
4 P) L6 g# p# `; W7 Q
for (i = 0; i < upp_frame_size; i++)
5 H5 s O) F H8 P
{
/ y/ z1 k1 u3 l4 o( ]
upp_buffer_b
=i;
7 `+ b3 r6 D* E8 M% B5 b" d
upp_buffer_a
= 0xDEAD;
- t5 ~: A* R1 }! M B. g0 ^
}
6 Q+ Y6 o. F5 m4 ?9 G
$ j5 ]6 ^+ K( W
//for(i=0;i<1024;i++)
( ~% c- L' ?; _0 b" P" J$ W
// temp
=0;
2 f0 M4 r5 R) R
0 m0 `3 G/ v } A1 b
//UPPReset();
$ w4 S/ f- {7 A, }) E
/*启动UPP DMA传输*/
! X: Z$ E% ?1 U- s
UARTPuts("upp_prog_dma_i\n",-2);
8 \: b) B% B: V4 P
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
4 Q& u# K0 |; J* _- ?. k
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' U% _- H5 z0 Y8 L/ D; v
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
+ F; s8 V5 ~. s) I
. @* ]# ?, @/ Z7 Y
UARTPuts("upp_prog_dma_i\n",-2);
' E y+ _) a2 r, k0 h& a+ G
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
, e+ [) n/ R6 A9 ~4 X/ t* o
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* e% o" C% F- Z
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
" v. ~6 y* A# |" w7 a7 ?6 w0 j% `
2 C( u1 b& n/ h V
/*等待UPP传输完毕*/
K$ r) m E l! f/ X8 l" C
//i=0;
9 @1 ~$ u$ J3 q: D3 u7 k1 G
//j=0;
$ _: K P3 X, B$ b
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
% |3 U I' G2 b
{
' ?7 L5 ~7 i, T) j1 e
/* 测试UPP传输的同时操作普通DDR数据
b6 X' k1 W: N/ w; r
temp
=i;
6 p0 N. P1 ^/ B) z# X3 L. b5 `
i++;
0 f3 V6 _3 J2 Y. D4 m) n
if(i==1024)
0 D# c. j; m3 }7 T4 ~" C# I
{
5 C5 |( N5 I% F; |6 G4 n
i=0;
! q" n0 a" r: y: _) Z
j++;
5 s$ h1 e" k" g* U/ J: c
}
1 p/ C1 _6 Y, I; K
*/
, `# ]$ P! [, A
. p9 O/ q" F! q8 a% ?& K8 E
asm(" nop");
% h, [3 q) ~; c( v, u! w. m0 t/ r; [
8 d) t# v9 e% e# {( B& r
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
# T' w, u7 z }1 l) V: H
}
6 Q2 {" k6 g3 c- R" G
5 u% G8 w( v8 Z. i/ y5 k
/*检查UPP传输的数据是否正确 (loopback modes only)*/
( T+ u2 _! a' F2 B+ W/ r, P
//UARTprintf( "i=%d\n",i);
# R2 {) g# m9 l. |9 p: T5 c
//UARTprintf( "j=%d\n",j);
5 D9 @* z4 \: u" ^
UARTPuts("Data mismatch in buffers.\n",-2);
. V# v3 g w3 |
if (upp_interrupt_count == 2 && upp_error_count == 0)
/ t& Z1 Y) C4 p2 @, k
{
# c5 p' @6 _( T: H# }. [/ O
for (i = 0; i<upp_frame_size; i++)
( h* p. `3 G8 }7 \
{
' Y: T$ q$ G( U9 q3 v
if (upp_buffer_a
!= upp_buffer_b
)
8 M* C3 j1 M/ H( i" V; U- a
{
" z* f6 [# E/ Z1 f
upp_error_count++;
& Y4 y0 N2 x$ V8 I( s' c* N
}
# T3 `4 _0 A. k3 j: ]
}
/ I! h9 f% S7 d# S( w- W/ o$ y
}
, p( v( m# B+ R8 G' [* x
8 v( F) R! b% N- c. j
/* 报告通信结果*/
7 j \6 i3 O! [, _
if(upp_error_count != 0)
4 }0 j: t; o, t$ s, D0 l2 ~
UARTprintf( "upp_error_count=%d\n",upp_error_count);
M* A& d: G( C7 q3 H& Q
else
# X5 v9 h }& M6 Q' [
UARTPuts("uPP transfers complete!\n",-2);
1 I8 J2 @ o! X% U/ g
8 @: F! N$ b! U* ]
UARTPuts("Do you want to print all the data?(y/n) ",-2);
T$ ?# ^2 I! T) ]$ Z2 }4 _
UARTGets(ch,2);
& Q3 G; C8 j0 t- M
UARTPuts("\n", -2);
" ^' ~* T& Y2 h; k
# ?3 q; p! i/ T& n: z( L9 ~
if(ch[0] == 'y')
# ~/ P& Z/ p+ c g9 F; h
{
4 U! ^5 |- ]5 ~- T9 V
/*打印全部读到的数据*/
, J, v/ p+ J J# h. {
for(i=0; i<upp_frame_size; )
# R+ }# t# A9 P5 g
{
% R# }; ]: U) ]2 K8 t% k
for(j=0; j<5; j++)
& U0 l: [3 B' a( M
{
5 U& L: s# j' r) I; R) s0 I( y
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
$ v2 e0 h$ V, U8 X1 {8 C8 Q
i++;
; `2 [( G7 y+ u$ V U3 B/ m4 G
//if(i >= 4096)
1 z' c3 `0 `! K. R) n
// break;
$ Y; l8 ?! u4 ~4 k
0 R1 X: M( O1 ~# @
}
9 u w r% D' [/ M0 i+ E
UARTPuts("\n",-2);
7 y- b/ z3 L4 q; ~, P6 Z
}
) m0 ?2 L% o- r% j# D
}
( x- ?- C6 m% u. Q
' B' X' n5 \! ^1 P
}
3 K2 k* e6 x" |
! s# @ Z) M2 ?
6 ~2 B y0 [; e$ ?0 ~
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
* c0 T( r( Q; f( r. Q9 G4 ?
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
4 x' R* g l% \( l; K
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4