嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
' h6 S4 R& R! i1 ?! ^
Void UPP_TASK(Void)
5 t) H/ u6 P4 N) K, |
{
$ H) r# C. `' ^2 H4 _- S; K
* E5 \9 {6 N: H. q* W3 x! Q
int i,j,k,target_int_count=2;
# d0 n+ R5 J! m) D9 ?# A, |. m
char ch[2];
+ Q4 I- V+ H8 N" n
B0 M6 W: I* y6 Q4 O6 k& y& Q8 I5 C
! n7 v |" }. a0 M+ U; Q0 o
1 p. S9 g# N( ]5 Z6 W" }9 i) C8 b
upp_interrupt_count = 0;
& x5 _3 A1 s1 T
upp_error_count = 0;
) A' C! j4 n W( u% h9 q
# B L( s& B2 y, u) K
UARTPuts("\tResetting uPP buffers...\r\n",-2);
, s, O9 i$ E" h
// Initialize data buffers
; }! ?! J# F+ S, N5 }1 c4 }) W
for (i = 0; i < upp_frame_size; i++)
; x; d- m; y3 N. R c: b4 C
{
9 J0 z8 ~. F5 x1 w: V
upp_buffer_b
=i;
; s* Y! ~. L7 g; N H6 D
upp_buffer_a
= 0xDEAD;
1 f2 A X4 ]: v; R/ ?8 s& m/ X
}
. B' R/ I3 V+ A2 S
9 g) ]! b: G6 v1 o
//for(i=0;i<1024;i++)
- L% E2 a. P' P- C- J
// temp
=0;
% V6 G5 f0 J `4 a7 o
; F+ c0 R; @$ m( v/ q1 G4 ?) Q0 K
//UPPReset();
' ^. `; K D' n/ T L* H. [
/*启动UPP DMA传输*/
/ Z; v9 t- k" Y! G$ n
UARTPuts("upp_prog_dma_i\n",-2);
1 {5 ]! E- D0 s% x2 T
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
1 I# b+ T" i3 O; ~/ Y* Q
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( T! y# W" p- P3 ]
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
$ @ L, G. q+ r: ^9 _9 R7 j6 W( ?
! {8 ]% J/ s2 T! U# t
UARTPuts("upp_prog_dma_i\n",-2);
( P. ]4 p% v4 ^/ P/ h9 i
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
1 F9 K9 f% |+ m; n4 J1 \
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( n9 |6 A6 _/ Q/ {( M
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
|8 y; w7 |+ ~$ h! Z5 m
7 z$ u4 ~6 G+ M( w c8 o
/*等待UPP传输完毕*/
" M! o: {6 C9 p; @3 L) Q: ~
//i=0;
8 R+ M# |3 V. V) j- {
//j=0;
9 e$ o* {3 W9 K8 B0 f
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* g8 K5 j7 }& y; w* |
{
; @$ ~) X+ J4 f$ @1 y: I- _) i: s
/* 测试UPP传输的同时操作普通DDR数据
) n) w/ \! {( Q1 H
temp
=i;
$ D* D, m9 ]! e
i++;
# \0 S2 E% g$ C0 N/ e1 F) W% Y
if(i==1024)
5 V* x8 a m7 g; D) A4 I
{
; v7 Z7 m& B, G: K: a+ K2 p
i=0;
9 A, W; R2 p7 r8 y+ a' g/ x* Y/ Z6 _
j++;
& I9 h$ g" \. M, Q6 W" e7 A
}
* L% q) [/ N) I6 ]( k- L
*/
$ T" n- N1 n0 a2 G0 K
7 i$ a) j( ^$ \' @: h" L
asm(" nop");
5 G, c$ Z) y. [# h8 A1 J, R1 t
2 {# l0 O$ \, r9 [0 h1 q
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
9 d+ b- ]2 S4 ` C) H ?% k$ u+ Q$ J
}
% _, o* A0 _. B
h8 b: N' e) [( ]
/*检查UPP传输的数据是否正确 (loopback modes only)*/
2 J$ j3 d" b* }: C1 L1 E; m
//UARTprintf( "i=%d\n",i);
7 a$ |, e7 I6 i
//UARTprintf( "j=%d\n",j);
. A. J& r) Z) P! \! R; v/ J
UARTPuts("Data mismatch in buffers.\n",-2);
: d7 f& q* Q9 p3 H( w/ H
if (upp_interrupt_count == 2 && upp_error_count == 0)
( [5 v( Z6 f- E. }" G/ Y
{
9 a* {! g, B2 s0 E; l# w& j
for (i = 0; i<upp_frame_size; i++)
& M0 x7 p' p" c, M" N5 u
{
/ t- P* G8 C4 b- Y3 m3 p
if (upp_buffer_a
!= upp_buffer_b
)
: f; @# k# G* }/ I: a
{
0 i9 B& @+ E8 i4 i/ S W
upp_error_count++;
' x$ X& y2 T, C, Z7 K% j$ p
}
9 M, g3 X* a, y% e Z/ q9 t/ N5 R3 S
}
# |2 }& O) w; H3 H Y
}
3 ]6 M% x# q& q" x% O
+ g M( w4 ^3 G2 P& U; N
/* 报告通信结果*/
) t7 Z: G6 c; W4 Q8 P
if(upp_error_count != 0)
' ~+ [. b4 v5 g+ [" @( M! }% r0 }
UARTprintf( "upp_error_count=%d\n",upp_error_count);
1 ~5 [/ S* a) |# J' z9 L
else
$ \5 `4 `. U) `6 c9 z
UARTPuts("uPP transfers complete!\n",-2);
8 g$ W( x0 w& t; F/ v Y
) s; x3 [9 y$ O1 ]3 V% g: e
UARTPuts("Do you want to print all the data?(y/n) ",-2);
5 d; ?$ G/ {# H t; L6 M: _
UARTGets(ch,2);
4 M7 U: s7 R: {! {" {
UARTPuts("\n", -2);
# f* a" o U+ r5 s/ `0 ? Z
6 p+ U2 }7 I! Q& z+ V/ B
if(ch[0] == 'y')
* `4 c; F6 h" D) M3 c9 G
{
4 l |, |2 s4 R
/*打印全部读到的数据*/
. I& S, r& i3 w$ ?0 M9 `) o4 v" N
for(i=0; i<upp_frame_size; )
- F7 U8 z% @' U7 V
{
6 H, w8 ^, b. P4 B: V3 `
for(j=0; j<5; j++)
. f K) V4 Y k" ?
{
6 Q( b0 S! F4 }) R" k% h
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
! i7 E& S9 P7 z2 w
i++;
( N) A. U/ O& ?' g
//if(i >= 4096)
( n3 B3 y9 v& G6 B
// break;
" ^1 a) \: S7 [! _2 b$ b$ l
0 D( N4 V2 ~7 n7 @* w3 m
}
2 C: C( Y4 x1 i6 z
UARTPuts("\n",-2);
0 w1 |4 K' X5 Z- l; P
}
; L- e7 C$ s5 a
}
1 ]7 E6 v. o, w
4 n" H8 V, x. @
}
7 V/ r# _+ {% F, J2 s4 K/ M
) g: C9 s) {# a* }
4 P6 B6 r$ m+ u0 c6 I. I9 a
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
4 g. h4 W# I* ?$ d$ {% H
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
1 a& [ |3 L$ @$ n* z- Z. u0 @' Y
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4