嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
, r' r8 f. d0 ~; c" G( k
Void UPP_TASK(Void)
' U! y3 r! k$ h% ^
{
' `7 k) E9 a$ h) t- D
" n1 m$ _) g) D8 w/ w. V C* f: @5 _
int i,j,k,target_int_count=2;
$ n; s" n: D1 m9 G) L# s
char ch[2];
3 @# ?- S+ b& I `
& y) n2 }: r6 J0 N% c N
$ N& P! D7 } A% Z# c
" E( u1 g" n \
upp_interrupt_count = 0;
/ y+ o9 |5 i- d' \2 I& h/ y' c7 Z5 ]
upp_error_count = 0;
0 q/ J5 E, C: q( `, m
; _! e: a u7 G3 _
UARTPuts("\tResetting uPP buffers...\r\n",-2);
: i/ ^. r% V! I8 v( ]; ^5 v
// Initialize data buffers
k9 |1 p" f y# L- e. c
for (i = 0; i < upp_frame_size; i++)
0 G$ M. j5 l: C3 K0 p5 ^
{
- A% b6 j! V- l7 t9 M0 \
upp_buffer_b
=i;
0 w/ j3 o/ k: v
upp_buffer_a
= 0xDEAD;
7 K1 v1 v. n; ~# B- j3 k1 C
}
5 q/ N5 X4 ^2 G" [
& G/ R: g7 u+ g
//for(i=0;i<1024;i++)
! w. r' T" ]8 e
// temp
=0;
* }; @# e' X/ {( R& {8 l
6 m2 h) H$ l" X$ B) y I$ ~5 H
//UPPReset();
* n9 H6 D1 F; b# C: x* q
/*启动UPP DMA传输*/
& Z) z. B8 e; L) u& n' D, k
UARTPuts("upp_prog_dma_i\n",-2);
" z; |- l; z( u) Y
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
5 q. J. d% H" y3 a6 N
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* [- \1 `" b8 @2 D0 Y# x. E. u6 o
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
I6 U8 u* C1 \9 Y m% p: w4 H4 q
; q1 c! W1 o8 T+ ?
UARTPuts("upp_prog_dma_i\n",-2);
7 @6 U% a" B6 Z$ H
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
3 h; n9 z; A7 j
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; h. P- p/ `) G6 n
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
" U+ B2 @2 V C8 S; s5 a
: s( s. @4 i1 ^4 B( h! s! T3 A" M s. R% ?
/*等待UPP传输完毕*/
2 v, p* G2 }1 d3 M. a/ ^
//i=0;
1 r4 }, d3 h* x, f. K, W1 B! L/ D
//j=0;
' I' j$ H T+ p D$ u
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
% x. b, X. e- R# Q& L/ z$ A' F
{
# B4 b$ O t: ^; ]$ c3 q
/* 测试UPP传输的同时操作普通DDR数据
/ u. ^' N# D9 a9 R
temp
=i;
# A& L& O3 m: l
i++;
, t0 F& q4 [1 H
if(i==1024)
7 z: @' l7 o4 E
{
, p5 V5 d; z( i' e" i. f0 g
i=0;
' M6 ]! y7 g* j% t* k3 ~ T
j++;
$ _7 C+ F7 s7 T; ?
}
* t: a, a3 f: L1 i$ R: _5 c2 t3 a* }
*/
- h' X( [8 d4 j6 v' k* f, l
! v0 I# J1 M% s6 P9 N
asm(" nop");
5 K _( a$ R f/ r4 ]) `- L
- I# Z$ a, z1 p0 [9 v
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
0 z% q% n- ]( v ~( M1 |
}
0 Z( i: z2 x$ b& H9 t/ p" ~$ ?
$ C: G- u' F! j9 n& ?7 C
/*检查UPP传输的数据是否正确 (loopback modes only)*/
3 S2 n1 k. J) I+ g" m
//UARTprintf( "i=%d\n",i);
: l4 P2 G& |: ~; j; x
//UARTprintf( "j=%d\n",j);
/ p1 \& E8 V& I% F; s# B
UARTPuts("Data mismatch in buffers.\n",-2);
2 A/ K% P( i* C2 l. |1 T$ `
if (upp_interrupt_count == 2 && upp_error_count == 0)
* p8 B5 W+ P1 U& k/ H Z
{
7 B6 @& _9 G; Z6 h& J! M4 ^
for (i = 0; i<upp_frame_size; i++)
! h, T: _& P8 C
{
8 K$ b9 Y/ O4 K \* z) j
if (upp_buffer_a
!= upp_buffer_b
)
( T; {* D7 r7 Q1 ]4 u0 W2 y3 @% O
{
" K2 `9 f; S. r6 ~; ~; q
upp_error_count++;
: [& _2 ^4 `6 v+ w5 D6 U4 d8 w6 N: H
}
, P2 J$ s. O4 {' i( U
}
1 E: Q. l3 R! q* m
}
l7 H' f& [* V6 `) x4 D6 _" a" \. x
+ F0 F+ {6 C6 M+ x
/* 报告通信结果*/
9 ]; h0 t+ L4 g0 z, Y2 M0 z$ V/ J" y
if(upp_error_count != 0)
; ]# B- ]6 W- s; b4 t1 z
UARTprintf( "upp_error_count=%d\n",upp_error_count);
' U5 M; K1 Q7 j: C; Y
else
9 ~2 U2 u; F, i% X8 ]
UARTPuts("uPP transfers complete!\n",-2);
% P; r2 L; k: V x6 S
( n+ T9 e3 o! X( h" x
UARTPuts("Do you want to print all the data?(y/n) ",-2);
: y% j: A" N) V
UARTGets(ch,2);
- K+ n8 U7 b! v2 u* S6 ]
UARTPuts("\n", -2);
l7 M' n* j; _! X
% P4 ?1 V! {3 O( M# U
if(ch[0] == 'y')
0 j6 l! a: ]3 H4 r6 Z
{
0 R8 H0 w* |5 l8 N3 E- @6 v# b
/*打印全部读到的数据*/
. A( B l& ^! x0 |
for(i=0; i<upp_frame_size; )
# ~# [2 K# o3 z0 f0 h2 P1 F+ ?
{
) H& ^0 H0 O# W7 b6 U7 e0 ^* R7 ^& E1 L
for(j=0; j<5; j++)
+ F2 p* V* `0 L8 V8 e8 z
{
6 _: s w3 Q: |+ p/ h% T
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
+ p4 D. H# F. [
i++;
: s, h1 N2 S4 J6 R- u1 D* }9 M
//if(i >= 4096)
- P2 W( M3 K+ c0 b; v# `. F
// break;
& H& t6 q( m' J5 [0 J8 N/ C
' ]1 t2 h$ X/ r2 s0 [
}
7 s( o* {9 G K
UARTPuts("\n",-2);
' L. Z; k9 C* O/ T1 I
}
6 V/ S; ^% v f4 G+ I3 w1 C
}
, N* Z9 V* ? b! r1 }0 N+ @2 K8 q2 r
& X& y, E0 v" B1 k$ t+ C
}
+ t6 d9 R0 V, o: V
% z* Z7 j" b0 {6 q! U
+ G3 p, D. a# K0 J# ?% Y
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
. @! y3 }& m) w' S) B+ l# y
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
m8 i9 H$ E' y' _6 q4 Y
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4