嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
. e9 K; G; a1 x' E6 N! \4 A
Void UPP_TASK(Void)
/ p; \/ |$ P' v) R9 \; v% c
{
, V$ B% N3 b* m" g
7 Y3 U( @' Q$ _- t4 m! K9 _
int i,j,k,target_int_count=2;
& P, _( c$ H. w0 h; U6 T
char ch[2];
6 f% F4 ~" j( H3 F# \
1 q- Q! t& h, [2 F, C! u
7 c0 C( _. ?. B0 L8 m/ u- y) ^2 p
6 T, X2 j T/ q- N' f' q7 f
upp_interrupt_count = 0;
# ?& P- v/ ?) h4 q, u% B
upp_error_count = 0;
$ O1 I/ M5 C. T* b/ O# F
# ?4 f( ]+ K, t' \
UARTPuts("\tResetting uPP buffers...\r\n",-2);
0 {9 a. x1 u! n$ G
// Initialize data buffers
( v% ~+ D. R$ \' L2 \0 W
for (i = 0; i < upp_frame_size; i++)
A- O% h. O" J2 t% D- k: j
{
' }$ k+ ~$ }5 R+ g
upp_buffer_b
=i;
4 \% c R8 t b, o8 _- A
upp_buffer_a
= 0xDEAD;
$ ?" i: r0 V \& P3 Q1 E4 f
}
% L% T. Q1 ?8 O
: e9 C/ q1 R9 }9 ^
//for(i=0;i<1024;i++)
+ d" Y% F# b7 n! S! a% N8 o$ d! P9 n* Z
// temp
=0;
+ w2 |) A: Y6 Q4 K7 r
4 A' w. w6 [% Z8 a
//UPPReset();
0 y) C# d1 ?1 g' i% H( N( \
/*启动UPP DMA传输*/
/ l" V$ G" H- ]3 x* T8 i1 j! u
UARTPuts("upp_prog_dma_i\n",-2);
2 u/ r* w# S& m- q) o. N6 c
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
: U: m X9 g/ N G$ O9 U( G
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, f3 j) x4 r: O7 X5 U
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
6 m& N6 S: {9 d8 D& D2 G) S. y! }
. t' u) z( z( J% C$ E. X! P
UARTPuts("upp_prog_dma_i\n",-2);
8 _! V, G; W# k# j
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
. |) A. I' V9 I, x( h* V/ N
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! {# |; R9 y6 X0 U& ?8 V1 V3 `) K
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
$ `- v1 W/ _: J& p( \
0 ^& \& B# S! `+ c) ^- w$ p
/*等待UPP传输完毕*/
2 b! J. q9 C1 ?. X) G3 R, f) t
//i=0;
3 F) C" n$ h9 T7 X5 l
//j=0;
" J+ j i& H) }
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
% p+ w& M: E2 q6 ~/ H- I
{
% Z' X- u+ B1 U( R! Q& o' n
/* 测试UPP传输的同时操作普通DDR数据
p) Z( k1 K" t9 A4 `( T! X
temp
=i;
( n* w0 |' x- ^) v
i++;
' h2 x& D6 g" ^8 x+ @
if(i==1024)
, K2 ^9 z! U g# P! r
{
4 f" J t5 b* x" {
i=0;
: F* |5 f8 _0 A! N' g. P. r9 m k @) T
j++;
/ [" `- O7 s' l. a$ Q) D. \
}
! o' ~( i% J6 Q$ C+ A* o
*/
( h/ S4 k" S' J# r# v
/ R% d) d! J* ~" z
asm(" nop");
$ Q% m K+ T# a1 T6 [4 B( {- { v
) o+ G# T& V/ ?8 i
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
9 R& j# v9 H* y. X$ X7 R3 @
}
% }2 h$ G8 r5 H5 \& @# N3 F) M
. A" I1 ]2 I. S* x& X3 f
/*检查UPP传输的数据是否正确 (loopback modes only)*/
9 G8 n t1 g. O8 ^% ?
//UARTprintf( "i=%d\n",i);
+ L/ k+ O' N4 g4 B+ P% g
//UARTprintf( "j=%d\n",j);
: m0 t- {/ F* r/ t
UARTPuts("Data mismatch in buffers.\n",-2);
/ @' o: t( o! F) {1 Z. B5 p
if (upp_interrupt_count == 2 && upp_error_count == 0)
8 f6 c) h i# S3 ?6 x
{
) Z, t/ U* k2 C
for (i = 0; i<upp_frame_size; i++)
# L; U$ b* O' ~& C) o( T
{
5 {: r8 o. d8 Y, T; ^2 ?5 A
if (upp_buffer_a
!= upp_buffer_b
)
2 Q. F$ \/ b$ ~; G3 l
{
5 z2 h8 c b: \# j2 F: ]" v' W
upp_error_count++;
) B9 e3 L" Y) {& C. F
}
& i+ l) V1 q) d% H
}
+ Q" s1 u7 \! k: |- t1 h
}
: H/ T' u6 I5 B6 v# X' e, S, t* ^
9 n0 W$ L$ ^$ P' p3 z+ F ]
/* 报告通信结果*/
' T% i( P1 o$ J
if(upp_error_count != 0)
5 T6 \$ a! P* z1 [7 X$ y' v
UARTprintf( "upp_error_count=%d\n",upp_error_count);
4 Z7 T/ Y* ~' J0 ]
else
: e7 [6 \9 V) Y7 L
UARTPuts("uPP transfers complete!\n",-2);
& s8 B8 R! e% Y; N# M" @8 m
& Q( y( }7 A8 h0 X! t1 t" ^! [8 P
UARTPuts("Do you want to print all the data?(y/n) ",-2);
" ?8 Q; }' ~* j i9 Q: h! Q
UARTGets(ch,2);
& t3 {6 F2 B/ A
UARTPuts("\n", -2);
$ V5 a4 e# x+ s) ^
0 n% L. R/ |* v9 h3 i- ? A& ~
if(ch[0] == 'y')
" l0 Y0 l3 K2 ^0 {: U5 o
{
* X5 J9 w% v2 u. M2 i' u4 y- f
/*打印全部读到的数据*/
7 X) [3 x' q3 a- t+ H; S
for(i=0; i<upp_frame_size; )
$ @% M5 D8 a% i7 y5 {7 h
{
0 ]$ Y$ B5 `8 u+ ]
for(j=0; j<5; j++)
( V9 }0 E1 k2 v# w2 |8 Z5 W
{
9 [5 F2 }$ B( X9 v% H
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
! m+ b3 ]3 _! X
i++;
* e K( c3 H3 T7 @) S- w2 y
//if(i >= 4096)
9 k% {* C0 H4 T/ k( r8 V( G
// break;
% `- J/ q1 l2 \% n& D7 s+ R2 K
+ ?: E7 E- {# L! f2 M
}
, e' t1 z5 n- `8 E
UARTPuts("\n",-2);
3 X, I, u a3 K8 c
}
6 O- [4 P5 D; Q
}
$ q+ \- ~# [$ N. r E
2 ^1 W' [# z/ E+ \/ a
}
. f% `: M: N% m% x5 o5 T: g M
" l- M4 H- d. L" u8 x; s
& k6 n; r5 v4 Y2 J& e% B( f
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
6 a$ e$ d7 u/ |2 P* R5 D
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
6 o! \! U2 k, V+ r
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4