嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
b% R. h; G2 b5 J
Void UPP_TASK(Void)
K* f/ W: g- P2 g) W# v' v, q
{
' \: S" P3 U% @: h3 C+ \. K
/ W2 Y& r4 Q ?: l& _
int i,j,k,target_int_count=2;
. T9 l# R4 R# N
char ch[2];
5 v& Q7 A4 l8 _' s
1 v, U6 c: \# f/ o% A% v
! X' m1 |1 v0 \8 u
) Y* {; f8 |, V+ E+ l# o- U
upp_interrupt_count = 0;
" @2 [; P) |2 _+ G$ b/ Q2 }0 |( R
upp_error_count = 0;
& _$ Q, w% \6 ~) t+ }4 `4 r
: W% E0 x& a& C7 |. q& X
UARTPuts("\tResetting uPP buffers...\r\n",-2);
9 h4 Z }9 k7 ?1 y; J* u0 q i
// Initialize data buffers
l/ i0 v+ k3 L6 \% Q
for (i = 0; i < upp_frame_size; i++)
4 X. O% D- K. D2 |; q9 \$ f
{
9 I: q: q+ h3 e. {
upp_buffer_b
=i;
6 H$ G+ ?5 D; v8 T6 k
upp_buffer_a
= 0xDEAD;
4 t5 n+ L% x/ x5 {. ]1 S
}
7 I4 a" K7 {4 [" B
5 N4 D, y& A9 }6 ?1 l, e
//for(i=0;i<1024;i++)
( H7 b- ~0 X5 r3 z! _
// temp
=0;
! `( I: w$ [ \, M
2 {. C. t, G& p1 k2 ]
//UPPReset();
/ g& h' C6 t* w- c, W& ~3 M
/*启动UPP DMA传输*/
( h" {9 r/ l5 F; L5 `$ h
UARTPuts("upp_prog_dma_i\n",-2);
5 r; s# P6 H; V' T- N
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
. G; I/ I* |. H3 l1 s5 F' N$ [
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& R: r+ c, k1 b0 _
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
' `. C8 e5 T, J; k' u) I& K- O
, I* t4 T" I1 q' Q
UARTPuts("upp_prog_dma_i\n",-2);
6 V! h& v9 V) \1 ]) G u
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
/ H& F8 R2 e7 l& U+ J7 K
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 v2 }4 X! t3 H
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
; s5 \: |0 ~, W# H7 U" _
# w# w; Y7 @% c0 j* O* `2 X
/*等待UPP传输完毕*/
0 T. S5 V7 V: @ z
//i=0;
, `% {* U/ O, e0 _) a f! a
//j=0;
5 |% z+ s) k) Y; f' Q5 m* Q6 V' G
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
( ~* T7 o- v) Y, h
{
1 `2 A# Z# U5 e/ K" j& L( C
/* 测试UPP传输的同时操作普通DDR数据
9 h0 M$ n: [. @0 g: p$ g
temp
=i;
$ J6 y5 {9 m' g
i++;
) g9 e" |' a, x( M1 H) c
if(i==1024)
6 K& F9 @2 W6 t3 |2 N; O5 x8 M
{
$ D3 A" t- \# E f7 X. _6 [
i=0;
' q R, [6 Z5 c6 s/ {) r* C2 G
j++;
9 W, ^/ ^* p P8 s+ t
}
: s! S8 o8 O( R) G- o
*/
$ X# x3 F# U) u5 Q( B
1 h2 |6 k% B {# V) S8 o$ N0 r3 y
asm(" nop");
( P* B: _6 } J v
4 k( t3 w0 Q$ @
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
# |8 u$ b1 r8 B
}
0 w7 n; N, N+ T3 {
; C) E* W8 |" `- P- Q
/*检查UPP传输的数据是否正确 (loopback modes only)*/
0 V9 j+ C) Y7 k2 h |
//UARTprintf( "i=%d\n",i);
/ P) j0 |! o* K) ~* E
//UARTprintf( "j=%d\n",j);
: V+ U+ M( [( N( v. A& ^
UARTPuts("Data mismatch in buffers.\n",-2);
# u4 }+ p2 H; A3 x( R
if (upp_interrupt_count == 2 && upp_error_count == 0)
0 p+ i) _2 I. p$ Z0 L1 i* c
{
) @& @8 ^ Y+ g: D$ G; X+ _
for (i = 0; i<upp_frame_size; i++)
3 N+ Y3 G% E3 f+ j
{
1 n$ w- Q; n% j2 w6 q
if (upp_buffer_a
!= upp_buffer_b
)
0 Y) l2 ` w. x3 G0 c8 S0 ?
{
6 @# L G# B) V
upp_error_count++;
3 P7 S/ L7 |, @
}
. q$ j+ \- v) V5 }0 M! r
}
, z9 E5 K; `0 ~" w! h$ w2 a
}
8 a7 S" i' t! K8 y
) s" w5 x9 G. g; E- w
/* 报告通信结果*/
9 b/ Y9 v/ A! u% S
if(upp_error_count != 0)
3 x5 x. u2 k9 b9 h. I: [- ]
UARTprintf( "upp_error_count=%d\n",upp_error_count);
% w. _5 f% i5 m/ S) }
else
" f; g" h" _! s# o( l% ~' h
UARTPuts("uPP transfers complete!\n",-2);
2 E% c) {: T, ~5 X$ N x
# U- g7 n7 R# p, m3 f
UARTPuts("Do you want to print all the data?(y/n) ",-2);
/ F4 X9 c1 _( u& x9 p' s
UARTGets(ch,2);
& J: `1 j% h5 v; y% Z$ A2 U0 n
UARTPuts("\n", -2);
2 U8 n4 [# z2 y3 C9 R
6 O: ?, p. [1 ? D: T
if(ch[0] == 'y')
) x5 Z; J) C m7 ?
{
$ q+ [, S* F; T5 y& a
/*打印全部读到的数据*/
; ^& |. e9 F+ g5 t' X" k/ Z6 P4 h8 ?: f
for(i=0; i<upp_frame_size; )
7 n3 \, r3 N5 _- x1 p
{
3 ?2 x; ^/ d' T' {( B2 s" o3 F8 P
for(j=0; j<5; j++)
/ I& L7 K7 b- q' U) s, H
{
8 Q+ E4 _5 T! K0 [% @1 F: Z3 l
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
2 d- [& e( r* {" h
i++;
k# V) [0 O$ l" {# W9 r
//if(i >= 4096)
! t; T3 H# U% F% V
// break;
. U2 M: @ o$ c! Z _& a+ `$ O
* |) G4 Q' I, [
}
0 g8 r' h2 s) q0 ~- b
UARTPuts("\n",-2);
: P! p, K. P P: G% z; j
}
& r4 ?; h1 v6 Q& E6 i6 T' h
}
* ?$ M; ~. M$ W" U; J. b$ q+ j
& G3 V" ?( l K+ j y Y' x# P
}
2 f/ @# L7 \- j. b' n% a6 d& P
: @; H1 r1 p( C6 `$ E2 z/ M! [
" y! {3 {1 V8 ~& I2 l
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
4 Q! s) o" q: [- R% E: J2 R1 r4 w
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
9 J2 N; b6 |# M, k2 q, `0 w r
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4