嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
1 `5 D# x8 s4 [: c9 G. U) J% j
Void UPP_TASK(Void)
, K$ c0 s; A, C! ?4 R. ]5 Y
{
% X4 \+ W9 s8 A2 J
7 p: Y1 G. W: q
int i,j,k,target_int_count=2;
, W7 l7 Z( ^% J1 e. h+ P/ H
char ch[2];
* E6 m( q* @& X
6 O- }8 b+ e K2 o) J8 N+ ~( o
2 o, U8 b4 q: w6 Z) Z5 A+ y
; L/ X& `( F; O" l7 @
upp_interrupt_count = 0;
- P) H% H1 u0 O# r) `8 c
upp_error_count = 0;
0 r9 i& U I! X z; r& L
2 {+ T) F" M5 `5 m
UARTPuts("\tResetting uPP buffers...\r\n",-2);
4 l, L0 q0 A* t
// Initialize data buffers
6 _8 O: ~' E. I" d8 ]6 ^/ z0 t/ \
for (i = 0; i < upp_frame_size; i++)
/ I6 L+ V7 _: d
{
7 B6 \( J2 ^1 X9 ]' o j4 U
upp_buffer_b
=i;
8 N8 l7 j! O( N3 X! F- _8 }
upp_buffer_a
= 0xDEAD;
8 w4 H/ v7 m& L# k# j
}
* _7 N3 @: K) W% i8 w7 B0 B& V& R
" N9 S& ?% r( _: u/ Y6 i
//for(i=0;i<1024;i++)
/ B- N$ G# E3 }
// temp
=0;
, L# x- d7 [" l6 a8 {
" W: `: R+ G. ?, F1 M5 V" G! V7 p7 s
//UPPReset();
& u- j \5 i2 T4 Z
/*启动UPP DMA传输*/
8 L5 [0 U9 _$ W' b0 H& ]8 T
UARTPuts("upp_prog_dma_i\n",-2);
5 k. _/ d! Z# J) X) e$ v
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
( _# ]0 m* o3 P6 Y7 R
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 g5 h1 ^' X1 A" ]+ g
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
$ `+ n& `+ @& ]& c6 N
0 O5 p& D, E7 J$ D
UARTPuts("upp_prog_dma_i\n",-2);
- m2 x- v7 X- {- b! k8 e
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
! n- A8 E r9 c& S4 t" b7 ]0 Z3 @
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, t" g% j w0 f9 o" r( a
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
; ?1 q, k# Q% p; j/ Q& p, p! t
8 J8 [- g: P f3 ^7 B; ?' b
/*等待UPP传输完毕*/
3 d" ?- p( I' `% f: F# [' C
//i=0;
& r. _" B/ f5 W$ ~) k
//j=0;
0 U# Y' B3 M2 L
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
! F7 \9 A& s, m3 {( ^6 r
{
! ]8 m8 T" B0 R9 n% p' u; {4 l3 K: u
/* 测试UPP传输的同时操作普通DDR数据
/ N) x) L) [* b0 K" C" e
temp
=i;
# i, g+ @6 `! U
i++;
5 C7 c. |) ^1 r" L0 C
if(i==1024)
) G& R0 F6 d3 K0 u
{
7 C3 f# J" J5 Y2 [9 K& X& [
i=0;
0 O' ]1 y% y+ E$ M
j++;
+ v' N9 W( P( B$ A( S" P+ D6 o5 \
}
7 l0 B: q P6 J: V) U- q
*/
: J: }, n+ Z6 w' L; B
0 Q: B9 Z# b- u- V' D2 e. ^3 `
asm(" nop");
; e2 U3 A& k. [8 ?, P& ^
5 z1 W0 V* @- V% v2 T4 q( E
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
, D% b$ x$ T3 U+ r7 z P. x
}
0 y) \! y4 e' [& d) x( C/ ]
3 t4 G+ N6 C$ l& p# P
/*检查UPP传输的数据是否正确 (loopback modes only)*/
# [" h, G. h8 f I; x& e! A
//UARTprintf( "i=%d\n",i);
8 [6 z c1 F0 x7 b7 i5 T( A
//UARTprintf( "j=%d\n",j);
6 J x: o% Z! w% W6 q% ^7 S
UARTPuts("Data mismatch in buffers.\n",-2);
# k B. |1 a z; F8 A
if (upp_interrupt_count == 2 && upp_error_count == 0)
# t& r# G1 n, B! [5 ~' z' `
{
' e/ y" {. ~9 p/ X8 h; I7 J% H7 U) u
for (i = 0; i<upp_frame_size; i++)
6 u) C: t3 U8 v' d) L3 M0 x7 x
{
* q7 }4 M4 F/ v6 p/ I$ |
if (upp_buffer_a
!= upp_buffer_b
)
( W) a: n9 o" h
{
8 c: U! T* q+ E5 x. d6 \
upp_error_count++;
5 _" J, s9 C! N" H# O5 \
}
" f r4 m2 v# y" B& K
}
( a6 ~. ]8 @- l# q6 l l8 y
}
% e9 ^8 o+ Y# ~& a
7 F/ m+ n; U: F9 Q' G
/* 报告通信结果*/
8 Y* n& M, s- U5 D2 e
if(upp_error_count != 0)
2 g3 D$ x1 C. `9 l& Z& ^* a
UARTprintf( "upp_error_count=%d\n",upp_error_count);
) s; P6 k4 A5 _8 C1 V
else
0 k! t2 N. e2 S. _; @: B9 F9 D
UARTPuts("uPP transfers complete!\n",-2);
: o+ @( Y& _% C$ @
5 P9 {0 J7 e' D9 A5 Y
UARTPuts("Do you want to print all the data?(y/n) ",-2);
$ K. Z1 k; [& k; S$ d
UARTGets(ch,2);
/ b5 o0 A+ o# ?* D: D" P0 }" |
UARTPuts("\n", -2);
: p, Y' O# d3 o$ p6 h! G; P% P3 i
# b( y9 o' B) n
if(ch[0] == 'y')
0 O& c, Z9 k; f$ f5 n0 r
{
1 C K V- z' n' n% z
/*打印全部读到的数据*/
' p. h4 D% `! M2 C# n
for(i=0; i<upp_frame_size; )
# _, k: W: Z( _
{
% M; e6 E8 _* K: b
for(j=0; j<5; j++)
" B$ _* v. B) b0 H/ k q
{
+ r. N) p8 N& j: b; o
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
, }$ ?- w+ z1 Q! G* X' G! i& a2 p! ~
i++;
) B: X X% H; W9 M* t
//if(i >= 4096)
# X U' s) u% ~0 Z
// break;
0 b! H$ Q9 C0 l7 v0 y5 V+ ^& V
. D# \$ G7 Q. y" M5 s5 T
}
0 N& F H( N+ H6 A6 y* p
UARTPuts("\n",-2);
; I: j3 ^) z2 ~' [& I, l
}
1 T" Y* V$ Y4 j
}
6 z7 F! m7 U8 |! F- q( M
6 i/ }$ ^; y' T0 n2 f4 U4 N
}
! t5 N1 ?4 P$ F; e, ]
6 D1 r: V0 O( j- Q1 u) F3 I) Z0 }
' z+ d- H0 f* [ S
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
$ K' ^4 A1 g) X8 r4 }& Z. J2 F& T
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
( }+ |/ O! t* q/ f& }- c) x- K
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4