嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ O; B6 \& G' x+ r* v3 |8 t
Void UPP_TASK(Void)
+ P0 E+ I, O' o
{
5 e8 |: ?* f7 G! r( H4 [& J0 ?/ @
( r& y7 ?& y* R1 ?' |
int i,j,k,target_int_count=2;
% j4 B6 _0 @- O4 n& p$ c2 Q
char ch[2];
% o3 }: u7 Q' n8 L
9 z: {5 F b. i9 I2 m
# ^ ^* F# {7 [- @+ s4 _
& E# d" t2 b# n
upp_interrupt_count = 0;
: i9 C8 _1 e: a& ^; f1 o6 P1 }$ E
upp_error_count = 0;
3 R Z, K4 U" R0 L: F
' q% ~9 w) l3 I, b5 B' h
UARTPuts("\tResetting uPP buffers...\r\n",-2);
( v, v8 V$ A5 O
// Initialize data buffers
2 g- e# j( a, ]' Z2 y: o
for (i = 0; i < upp_frame_size; i++)
( Z+ a8 Q# y: o
{
6 T9 ]: b, [6 \8 x9 A) c
upp_buffer_b
=i;
! [$ y) R* i$ \1 \" _
upp_buffer_a
= 0xDEAD;
# D) K: x: ?5 v
}
% [" f' u" w3 k a
; B9 Q: P- A7 |6 S. ~: o
//for(i=0;i<1024;i++)
?# j1 P! ^- R: s
// temp
=0;
; |% D8 m; O: i8 ]- X7 E1 u8 _9 n
4 E$ n3 B( R2 K3 s& J7 e
//UPPReset();
& i0 f2 ?4 O7 K/ S7 Z# L* G" U
/*启动UPP DMA传输*/
" k; a- r: n8 O; a1 w2 _, G2 R
UARTPuts("upp_prog_dma_i\n",-2);
" `& k$ S- I- o" d% b! D# p
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
8 H; R5 ]; S& q. ]3 _8 g
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 l# ^7 \, S% p6 a1 N6 z
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
9 y" @, k) s i r6 }6 i) W8 a* p
2 g8 N0 p# {7 _8 K: g+ V2 s
UARTPuts("upp_prog_dma_i\n",-2);
1 {) I# s0 v& p
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
; {- P/ [- w$ D3 g. f/ D
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! A' B K5 m$ q) d: b1 y2 H
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
; w& e# L" N' @3 ]+ s' y
4 h* S& t- v3 c, d
/*等待UPP传输完毕*/
3 x# C4 J6 E0 C. c8 f8 w
//i=0;
) q. @, T7 [; l! Q& C- \
//j=0;
1 i# H8 V8 {( n2 ?% e# {% L
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
+ Y% z7 P l Y' H
{
9 N& N7 p# ~4 H. [" Z
/* 测试UPP传输的同时操作普通DDR数据
5 @* J" }; z4 u
temp
=i;
. O L4 I6 F7 q' |" s
i++;
8 p9 _# J1 F- q8 u' p2 j+ Y; }
if(i==1024)
, ^4 g5 G; M7 m$ N2 |) ]
{
: ^ @8 C' O: P! N. n, f: R' j/ ?
i=0;
' a0 t3 Y* A3 A2 ^
j++;
( k% v% w6 F4 d9 r* u7 P- i7 s
}
& g3 Z. [+ ^; j& R) ~: G+ t" x. O
*/
1 W2 ~! ^' \# }/ h! X$ S
( ^: [2 _! O5 Y! m, l
asm(" nop");
0 x7 d9 c7 {7 @& F' |9 u4 Y: A2 @
I# s7 ~* s9 y! u; n
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
6 q/ T9 M, r: f( ~4 {. ?+ c
}
3 I( a/ ?$ C- E! i+ O
- ]6 ~* [, ]2 Y( X
/*检查UPP传输的数据是否正确 (loopback modes only)*/
6 w2 B" W7 D2 w) M
//UARTprintf( "i=%d\n",i);
0 M* T. X5 v W) W/ r* ]( @* x; w
//UARTprintf( "j=%d\n",j);
: V2 }" V2 c+ D6 I
UARTPuts("Data mismatch in buffers.\n",-2);
" K4 C8 s |& t' _$ l; R
if (upp_interrupt_count == 2 && upp_error_count == 0)
6 T- Y* C9 b& H5 t1 f; o
{
% U0 A* M5 Q3 m# j( H. E8 u
for (i = 0; i<upp_frame_size; i++)
% W' h# `2 x: o9 ^
{
4 f6 d; Z$ p8 ]! O6 y0 |( k7 s
if (upp_buffer_a
!= upp_buffer_b
)
1 m9 c+ T R$ t' t2 T* b
{
5 u6 `) z: k# X/ D2 y0 E* ^ P1 ^
upp_error_count++;
4 c$ f( A9 C3 {( [7 F
}
* k8 L6 Z+ `2 _3 |
}
: f; ^6 [0 u# A2 B& P
}
- }0 u- Z8 i( Y
- X% t! P) }: [1 q3 H( r* ^
/* 报告通信结果*/
; N3 x' o" L. k9 }
if(upp_error_count != 0)
+ \7 j0 I, W! B) p! v* S, N
UARTprintf( "upp_error_count=%d\n",upp_error_count);
1 z7 M( Q. X6 ?9 I( _ u
else
+ Z$ b7 G c, d8 K# d
UARTPuts("uPP transfers complete!\n",-2);
8 o2 x, `- K8 O& P+ b" F! j
1 F" ?: W' E- T( A* U+ L; z, p
UARTPuts("Do you want to print all the data?(y/n) ",-2);
; A0 b- y8 H- V6 G1 F; b
UARTGets(ch,2);
: ~* g3 x8 U9 _- ]4 ~$ ?7 w
UARTPuts("\n", -2);
: l& c: ]# o7 h9 x
% E5 l1 v8 i; U$ b
if(ch[0] == 'y')
( y9 U; T# C3 C
{
; J3 O5 m6 ]4 r5 Y* Y$ ?
/*打印全部读到的数据*/
/ B9 s7 U2 g7 I n2 F
for(i=0; i<upp_frame_size; )
) ^: h/ m8 I+ q
{
7 o, X5 g- s8 o5 I2 A* p/ [
for(j=0; j<5; j++)
9 F e& F: h% k) O- j ?
{
c& c: b5 `& f! T0 Q9 X
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
+ o& E* L! {! k. G: C
i++;
( W4 w+ q; M& [$ ^2 F9 M9 e; }9 O
//if(i >= 4096)
. U% o+ ~ s# q, |. G# q3 D
// break;
. f: z+ u2 ?; ?9 v
8 R# E0 g0 _$ y6 T0 ^7 [& R3 ~' ~
}
' ?1 d$ {3 u0 {& |
UARTPuts("\n",-2);
6 ~( M2 b! E; F! q% @1 y! Z
}
1 z1 n4 n# x! z( g
}
( _5 k( s! a- H
! C G* K6 s1 S- A+ |) Q3 `
}
9 u; l# J0 x4 a$ Z* v
7 i0 q$ u3 s2 e; m7 i, A
, R9 F, g% ^6 }$ }! Q
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
0 M5 \" s6 o- h9 k, `; e
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
$ y$ B+ k& g: o6 ]. J; y2 K# @9 z# |
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4