嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
8 U0 h9 x7 j* E1 a9 e1 _
Void UPP_TASK(Void)
' L. F* W( D- N/ e% a" A/ K# }. f
{
$ e! c0 _/ o7 c* t" Y7 E! L
: d( ` c2 P/ J: l6 @
int i,j,k,target_int_count=2;
* P# m5 D& s( t* T
char ch[2];
# B, j# A$ l3 Q" f) w4 ^6 R5 L
3 j9 L/ Y6 P! q1 M/ f2 q$ `
8 q+ n4 A) o5 \0 _( a
Y' \# @5 z4 n5 Y) q
upp_interrupt_count = 0;
; h G% p" A, }" `8 E/ E
upp_error_count = 0;
6 w8 k/ _3 H8 B. e; M+ u& m
) R# q0 u T e4 l8 d
UARTPuts("\tResetting uPP buffers...\r\n",-2);
+ Y+ ]/ n% _( c
// Initialize data buffers
/ o$ P) y" C9 e2 Q$ ~
for (i = 0; i < upp_frame_size; i++)
, F1 j* I; @6 P9 Y" h7 ?
{
) a9 k% }. A; X+ p- } Y; H0 E; U1 U
upp_buffer_b
=i;
+ T* u" w/ v6 e6 A$ u0 P
upp_buffer_a
= 0xDEAD;
7 K2 J5 C9 F* i: S6 Y' @. g% A" [& h, O
}
1 I! k& P* ]* A. N- ]& W
. `, u$ p$ c2 w0 Q: `) ^; L, p
//for(i=0;i<1024;i++)
$ @( d! |8 p/ |$ ?
// temp
=0;
, Q. R5 y( f0 \1 G
( S8 [7 P! h6 Y, Z/ g! `
//UPPReset();
, i) m6 N& I1 H& L3 ~; l
/*启动UPP DMA传输*/
6 Q: {6 `) z4 Y6 g: Y
UARTPuts("upp_prog_dma_i\n",-2);
" F; A% }* y2 Q7 l7 {
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
& f1 V, n8 Q- M3 s, w7 L
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 z4 `5 ?) K& R0 o
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
! @7 ?) r. \* p& U) r
/ Q, i4 }4 t0 ?7 A( c' z; e# l
UARTPuts("upp_prog_dma_i\n",-2);
) S+ |0 X) H; c4 t6 I5 Q0 M: [
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
+ B/ n" Q! Z' L3 W- l( Z
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 J( d$ E( P" w. I! K* ^
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
% M7 L/ V$ l8 ]* o9 V* l6 ~8 t
6 s( ^/ ^0 i% [$ W1 K% U
/*等待UPP传输完毕*/
! ~" T8 A6 {. z
//i=0;
$ K4 M" m* W; F% a
//j=0;
- }" p- q% \: I# h
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
7 _# u) n N8 |% p- Y
{
7 ]) A. i0 ~6 P4 Y
/* 测试UPP传输的同时操作普通DDR数据
' N' n& I2 a+ }8 [! M. V# g8 Y
temp
=i;
+ {. e$ a% A" t1 C. P0 C5 s
i++;
0 o7 H8 I8 u3 I" S2 @8 b
if(i==1024)
( r( M# l# R, I5 ?; ?
{
: x/ U! k! @. K# b9 b6 r: P
i=0;
; j9 n5 x( C' b
j++;
5 \) d( y1 V8 q' u r+ R
}
9 }7 X8 |3 Y7 | g" h
*/
i+ S' w3 Q5 A. p- {* R: H
9 J1 ~% X4 N% O0 }: |) c4 ?
asm(" nop");
; [& d) ]3 E6 s
0 q$ z6 v! g* q, M5 E
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
7 F( `; p' l0 B" _# L8 L3 ?# j9 t
}
1 q; g T0 k8 @4 l9 d3 N5 i
% K* g: `) ?$ @9 G' G5 U
/*检查UPP传输的数据是否正确 (loopback modes only)*/
- m- q7 K7 T3 a; J: v7 n. T/ z% P
//UARTprintf( "i=%d\n",i);
9 f+ s4 O3 E" X. ]6 f4 _
//UARTprintf( "j=%d\n",j);
- E% M2 e( v! b! S+ C/ C( S
UARTPuts("Data mismatch in buffers.\n",-2);
+ q" T; ]5 f8 G) P) {8 V( ?$ \
if (upp_interrupt_count == 2 && upp_error_count == 0)
% k# k# |3 T) D3 G
{
# v: j; E* y3 g2 }" S1 N
for (i = 0; i<upp_frame_size; i++)
% v4 D* \2 Y" l5 S6 \4 w
{
2 {* ?% z* j' c! _/ |% ~
if (upp_buffer_a
!= upp_buffer_b
)
, W3 d% ~3 h9 c
{
: K w K* g) J& K% B8 j8 z
upp_error_count++;
# \) g: a: b0 t; u4 j
}
& D6 j% U$ v, v) x ~5 h
}
( v e. {# V% O$ e; t& Q6 V* S# r
}
8 ]9 J/ s* J1 f% ` v3 b
6 J3 {2 a/ \$ B5 D5 V# i2 k
/* 报告通信结果*/
/ \' y8 |5 }; v: C+ K
if(upp_error_count != 0)
- B4 V1 J0 ?2 l1 u/ d$ ?3 u
UARTprintf( "upp_error_count=%d\n",upp_error_count);
: A' Z0 G9 @1 T
else
$ T9 O5 h( a7 ?* p# l9 r- d Y
UARTPuts("uPP transfers complete!\n",-2);
m# N- J1 e( b+ z( P% }
, ]. _. G8 C: c% f
UARTPuts("Do you want to print all the data?(y/n) ",-2);
s! P4 _) t6 }. _
UARTGets(ch,2);
# T& u6 m; n9 X9 |8 U8 j" x) E
UARTPuts("\n", -2);
3 {/ E: Y5 V* E4 s
; J. O. D3 F C
if(ch[0] == 'y')
: q3 h8 a, h7 `# G
{
' j/ g" ?* u1 f& n0 d5 I& w! c
/*打印全部读到的数据*/
, i3 t9 }% G C3 b
for(i=0; i<upp_frame_size; )
- J8 O. P) [$ ~; T9 p
{
1 E$ Z" H: I( P- b" N. k t4 p5 M) S
for(j=0; j<5; j++)
& J( {3 F4 w0 i4 ^9 [! a4 ?; ]
{
7 f; F5 I- m/ }8 M8 S
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
1 \( x2 H! P( {% Q/ I3 \3 W1 U: N
i++;
; H$ T1 u7 ~& A: A" U( I
//if(i >= 4096)
, d% B# `% N# E
// break;
8 Q& g% G4 u9 P+ @9 @* F; z9 |
. k' a; k- @# n4 g0 v5 d% y
}
, M8 V; S. n- _0 f; S
UARTPuts("\n",-2);
- R8 N" ^6 j. I4 j# u! _! n1 K
}
$ ^3 P+ M3 g2 _$ T! d. F
}
9 b; L/ j. Z2 J: k
9 U3 g- H% ]( P# a- b
}
! [# D6 ?" S9 i. t: I2 Q
" a& e0 c# O; p; D- J" `* E
" ?" E( D7 {$ r9 J. G- O& ^
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
4 E' ?6 G/ O6 e2 h$ [
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
) ]' f( E5 R$ {2 v
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4