嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
4 ~5 B# @7 j2 Z
Void UPP_TASK(Void)
! h R$ R, |% G4 X8 o
{
& Z9 W8 I6 z- Y% K$ g. A1 q
' e* v2 w ]+ l( J0 {
int i,j,k,target_int_count=2;
2 u* i P# ?# H% ~% B' M
char ch[2];
( S) d0 \" e4 \+ i3 b# Q3 I
# f: [+ l5 N8 r8 `2 B c$ l
3 X0 |% t- Y) k2 g; a! k
& _. h [( S3 v, g
upp_interrupt_count = 0;
8 X, H) Z* W# Q' u' u' O& a9 q
upp_error_count = 0;
9 c4 j4 z% d: y& t# [( ~) _ }7 s# g
+ v- K0 b4 G: L8 D3 b! W
UARTPuts("\tResetting uPP buffers...\r\n",-2);
5 J, S- [5 [/ d/ r; f
// Initialize data buffers
3 Z! J3 Z8 x3 C# B- J* A) p
for (i = 0; i < upp_frame_size; i++)
2 A) J5 F0 a) r
{
- q% H( ~* r, b" N( B$ n. ^) Q
upp_buffer_b
=i;
) U) _. ~8 l' ?2 F0 C5 G" I4 F8 Q
upp_buffer_a
= 0xDEAD;
+ T, t+ Q- a$ R, N
}
2 C& X( [! z6 u2 H
% e5 o5 ]% L0 i. `1 d
//for(i=0;i<1024;i++)
) w& x) J. W: c# `* {/ C. o' A7 U; Y' I
// temp
=0;
4 y* u/ h3 s+ f, [! V
, _" ~7 m4 W ?9 }3 o1 g9 ]* a
//UPPReset();
% Z$ `& K$ e8 P: I. }/ P
/*启动UPP DMA传输*/
$ e* _5 R! l' k4 w
UARTPuts("upp_prog_dma_i\n",-2);
& r& l+ r7 d7 Q
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
7 F: O% `4 Z0 e5 f
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ U4 `) k4 _5 Z4 q# W0 r
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
' J+ n! }3 F8 W0 r, O& A
( r, \) j D- l2 o
UARTPuts("upp_prog_dma_i\n",-2);
& w" ~( V. R8 Q& ?
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
2 M6 ^8 K9 n4 U* c7 p- n8 p
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 `& F6 x- h% A4 `
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
' Z* l0 I& Z. q
8 r) V1 t- O+ h z0 K
/*等待UPP传输完毕*/
3 d- W% d+ T6 i5 f) v' J
//i=0;
h" |8 v% j. Q
//j=0;
: y# R. H$ Z- {" Q) L
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
( P+ U" }# h. |8 T
{
5 w+ B( W) _9 K3 f* ?2 z9 d' V
/* 测试UPP传输的同时操作普通DDR数据
; \0 Z* q5 f% l4 X
temp
=i;
) U9 ]# Z& g0 v# E7 C! \
i++;
" y4 T: E: @. o! U' R: o! d
if(i==1024)
- E# b6 W( P9 R* v* C: V
{
% v* G- y2 u4 J. R& D" j
i=0;
2 I. o' E7 `, j/ N5 P% l- N
j++;
" ~. r6 G. i0 w: C- [" Z0 B" ^
}
/ s1 c' a$ t! s' O1 [+ a
*/
0 d8 u$ h/ E* }. C# c, k
2 j& w! s9 f. J# y$ I( s
asm(" nop");
5 C( k6 u& ~! `8 n
' q+ U# N* R7 F$ D8 l5 K
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
& \; h# ~& q( f5 ~; X/ G; X
}
6 k2 M; C; Y% L( m0 c
. z. E1 V" n+ _
/*检查UPP传输的数据是否正确 (loopback modes only)*/
4 }9 I5 U: j: w/ k2 ]9 b) D
//UARTprintf( "i=%d\n",i);
7 s# j2 E2 v, n3 t$ n5 y
//UARTprintf( "j=%d\n",j);
* s; G# f8 C0 K/ I; K
UARTPuts("Data mismatch in buffers.\n",-2);
( K# m. o) A9 K0 ?
if (upp_interrupt_count == 2 && upp_error_count == 0)
! h# C& Z! C* ]+ Z0 A
{
; z8 A. y/ x. S4 N4 \
for (i = 0; i<upp_frame_size; i++)
& r# h- N; T; }. }
{
1 L2 h! _4 Q) D! R8 {+ k
if (upp_buffer_a
!= upp_buffer_b
)
$ q# Q' r6 D( n# o2 x. ], D; s
{
* |4 L! J1 {0 C+ \ d7 v7 ~
upp_error_count++;
L5 d( C6 v5 G: N
}
5 v- v6 o1 P; B$ r- W
}
! J3 W) l% w6 _: ]
}
: i# v- u! ]4 y3 [
+ |! H# j5 ?1 f4 I& Y
/* 报告通信结果*/
3 W! ]* ?/ p# Q: k- C5 l7 g& U
if(upp_error_count != 0)
" {6 a$ X5 }4 w$ U3 k( `1 j1 [, w% `
UARTprintf( "upp_error_count=%d\n",upp_error_count);
2 s+ [9 w, c+ ]/ s9 R1 @
else
9 ~) b) b6 t2 E
UARTPuts("uPP transfers complete!\n",-2);
% z c5 ?( k5 V2 o, T6 A2 L, l( ^
) V B z" R8 {6 h; i
UARTPuts("Do you want to print all the data?(y/n) ",-2);
9 \& d! ~. k3 U' t
UARTGets(ch,2);
5 a F; n) R9 }1 I# r+ R
UARTPuts("\n", -2);
+ T0 I S t- O2 q! E7 n/ y$ ?
$ m! ~ ?( l" c" w# I E8 m
if(ch[0] == 'y')
9 q. B- A5 @( }% F" w5 K
{
2 n. @1 p# N8 {. p% }# v
/*打印全部读到的数据*/
) |" z. A2 L5 {+ |/ O& t8 o8 U
for(i=0; i<upp_frame_size; )
) P- ?' U7 @+ G! n+ {# ~' M6 E
{
4 u6 ]- C6 k+ c. i" e: h2 F
for(j=0; j<5; j++)
+ |; w5 f# A; J" L; b4 j
{
, r: R8 S ] R- V/ ~: r$ B) F
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
# o2 d( M j# M
i++;
# Y# i' M T9 t# y8 g% B
//if(i >= 4096)
. K3 }* x4 h9 o3 {3 {- `3 p0 d$ q; Y
// break;
% x+ D4 z" u w
( Q( \& H5 ]/ z" z; k! p. N& [" P6 a
}
4 Z7 r8 I, Y: c: h
UARTPuts("\n",-2);
4 S# m2 T! |' M# T* }) X
}
- U3 r' N! \# ?% ?7 S0 ]
}
: _1 L/ P; k9 v
) l; v+ s2 V) p3 p; y' [9 [
}
; {6 i* i* Z+ |7 Q
1 b4 x1 n8 I4 n. R {
& x% G0 }) C7 J1 ?
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
7 |& I3 H( E' \8 M5 ?& M
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
% |2 r4 |4 R, p
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4