嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
# F% A# w3 n) N9 D
Void UPP_TASK(Void)
4 |9 K$ O, i, f& k
{
; t& j% l, R; N# H: g7 e8 Q: y
5 z! w8 I4 f7 x* N
int i,j,k,target_int_count=2;
4 { ]! y! l" J5 ^5 ]- H
char ch[2];
: W# z! s6 ~ \3 ]* F2 [* o- w. o" d. d
. g5 W% E4 O/ Z# R" O5 Y
) g# }1 `0 B) Q: K! A5 W& c& U
& z& a& D/ ?' P+ j
upp_interrupt_count = 0;
+ K+ P* `. A9 s) K" g9 m
upp_error_count = 0;
; E: P: g5 q ?1 F* ^ n, E
) K. ]6 X) t0 k! R' R! P) G
UARTPuts("\tResetting uPP buffers...\r\n",-2);
5 M3 X' j! e' ?, `7 Q5 f
// Initialize data buffers
% Q% ~, K* R, v; k/ ? v. `
for (i = 0; i < upp_frame_size; i++)
- |! b, Y+ {6 Q, w2 ]
{
6 L1 H0 _/ S8 s! Q' D
upp_buffer_b
=i;
2 h. {" O; d* D' _
upp_buffer_a
= 0xDEAD;
" i/ C+ m0 D* ?/ h8 P! w) i6 Z
}
! w6 Y/ \8 p. d: i" \ z
; W! C+ B7 G( x( x% I: V+ l
//for(i=0;i<1024;i++)
) V0 Q, }2 Q3 ^8 R# J
// temp
=0;
) Z/ {- u2 \0 M( h3 j& s8 a! x0 I
1 W" u% M0 X( }, z* k j
//UPPReset();
0 f3 W( S; R P3 u+ ]
/*启动UPP DMA传输*/
4 V# ?8 I# E7 J3 l. |# O6 l2 c7 M
UARTPuts("upp_prog_dma_i\n",-2);
, d% t% f: u9 G! p6 ^+ Q) k0 M* f' t
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
5 U- V# e/ A8 V) e5 f+ f8 E% U
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- @$ D" S2 r/ L: G3 A8 e7 M0 o
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
7 x' k7 `$ q8 ?8 k
9 O" H; {6 h3 N" K2 G( j* {
UARTPuts("upp_prog_dma_i\n",-2);
/ D, u/ l v( y" C0 c4 [; s
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
' p+ q* J) u" t( k( P- S3 m
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
1 T/ a; B; U2 z1 E/ H0 Q7 s
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
1 h% }9 J) H% w! K$ w* p
7 T: l; {$ k, W% h- G
/*等待UPP传输完毕*/
8 ]; p4 T! C5 ~& s3 ~, |
//i=0;
+ i( w6 l! T8 A% x, {- R
//j=0;
$ k+ Q) t* M2 O$ [
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
# F) \" X) L, P+ r) q/ F% i
{
& [, Y+ N, U" s* |
/* 测试UPP传输的同时操作普通DDR数据
' Q" A4 O, c$ v. @5 ~ |1 K
temp
=i;
" B" [+ {: Z* D+ R7 e% |" A
i++;
! J3 J; J" G6 l6 F
if(i==1024)
6 a# h/ f# G i6 w$ r0 f/ T
{
7 v6 P, {; U5 h( g( @/ |3 D# q. @
i=0;
3 G: O$ ~3 i/ O7 V
j++;
/ ? J; u+ i5 z4 g0 e
}
, ?# R( q; B1 o: J# M: E, I4 C
*/
6 ?& b" {" I X6 _
/ D' D" [, s* x5 M4 i! _6 i
asm(" nop");
+ z& a5 r4 |& } @$ @5 r% R3 V
1 E1 I* [1 v' M5 Y7 C* V
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
- o% d& R1 s* N9 _4 l
}
; t9 K) o3 u J/ x! f1 v
+ N+ r" E' c, [/ [4 ~$ l
/*检查UPP传输的数据是否正确 (loopback modes only)*/
! c2 O( p+ q3 K- P
//UARTprintf( "i=%d\n",i);
/ ^# ]6 T! P) e7 K
//UARTprintf( "j=%d\n",j);
. @8 z& q6 w% D& p! K& S
UARTPuts("Data mismatch in buffers.\n",-2);
2 T9 L9 ~) x$ ]& e. m/ j
if (upp_interrupt_count == 2 && upp_error_count == 0)
( e! F$ t# w6 ^: l, L! R5 F7 ~
{
: v! n; j' v0 z, p
for (i = 0; i<upp_frame_size; i++)
: y4 y; X% ]9 v8 l+ U
{
1 x1 E) r; n( D0 \$ o
if (upp_buffer_a
!= upp_buffer_b
)
) ]! F e0 v7 x6 ] i" ]
{
$ P/ w2 i4 c1 ?5 t6 Y& H7 r
upp_error_count++;
A6 _: S& Y9 P# f3 u$ L
}
) X& _" R6 T7 Q: Z( |
}
, |3 B4 A$ X/ N. z- b# }' @
}
& ]: d3 F, T& ? c
4 d# ?) x0 T G& v3 \" Z6 k
/* 报告通信结果*/
3 T# `' \, j: `, {, s
if(upp_error_count != 0)
2 u+ W! W: J9 U8 O. n! D7 e6 H3 v7 g
UARTprintf( "upp_error_count=%d\n",upp_error_count);
, x- M9 ~1 x( f+ b0 l
else
) F2 L, g. F2 \! }% w# Z
UARTPuts("uPP transfers complete!\n",-2);
/ b9 S5 [% l3 ?: l5 X
& w3 |6 _1 N9 X" }( x' L
UARTPuts("Do you want to print all the data?(y/n) ",-2);
. H- w/ M6 J; E
UARTGets(ch,2);
( h9 I! n& h$ N( V& k2 U8 [
UARTPuts("\n", -2);
% W9 z! M7 d* j$ I
* R( p3 E$ R, G/ K$ ?& @2 m9 h. P
if(ch[0] == 'y')
* M3 x8 d, c1 o' ^$ o6 ~" `
{
9 ?( r, U4 A' r$ F. v
/*打印全部读到的数据*/
2 O; }& o) Q- [, s' Y1 D5 v
for(i=0; i<upp_frame_size; )
' o0 Y# {: {. R! K5 a
{
1 _; Y2 O; d7 }% w- Y, j3 t5 ?
for(j=0; j<5; j++)
2 H" {$ m8 m! F$ W/ \
{
% x9 O) R7 T, ~. U, r; `
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
9 W& q8 b9 i/ x: x- Z! @4 k
i++;
2 I6 K7 c/ q2 C# `! y
//if(i >= 4096)
! F* @3 z' h1 n8 h9 a a
// break;
* _; v# P2 b3 s" i3 U1 e6 \
# W) C8 A; ~- F' @4 |! C$ _8 l
}
' g$ c3 U8 k9 G1 E
UARTPuts("\n",-2);
. f, A" r* G. D8 m2 l
}
- Z* A4 Q7 U9 V* _# j1 F# F3 D) w l
}
$ R; U6 C5 P1 p+ Y
9 L% ~$ a4 B' G- U P f8 j% i
}
- B) j t" f4 v" z0 S
) P1 f e Y9 E! }6 h. N
0 `' l8 H+ D+ d `9 U# `/ O
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
7 B ?& }# R* R1 u& g4 [. x
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
* H$ U: _4 d: C, ?0 b7 g
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4