嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
" j6 [2 s/ \+ O
Void UPP_TASK(Void)
( x( N! c. |3 r' u
{
9 i. _ W9 E7 h ^. C
2 v' G& s/ t8 B
int i,j,k,target_int_count=2;
; b' o- H, ~2 N: Q4 i
char ch[2];
2 s) v8 E4 c; n% f
" V' y; ]* W: K, J5 z
7 j. H; y3 Q) p* q6 J! N* C0 j
/ T1 o2 B! u% I' S1 Y
upp_interrupt_count = 0;
/ |, G1 R& ~% K% V5 u$ ~ x6 A+ r' y
upp_error_count = 0;
! [4 {6 g. c/ N- O# w( A
: g- c* \% X L- Z6 c
UARTPuts("\tResetting uPP buffers...\r\n",-2);
; ~) G3 ^4 z' u; K! s( A
// Initialize data buffers
; X6 q1 V* V+ `( B+ H" O' H5 e
for (i = 0; i < upp_frame_size; i++)
" }' ~7 C9 z2 |# L0 J2 ?
{
. y8 M; c: J& o5 b3 W
upp_buffer_b
=i;
4 j$ r# R' ^6 e: z
upp_buffer_a
= 0xDEAD;
1 q6 m! @/ u: c% X, K
}
/ r/ Z ?0 H$ Y& G0 p2 D" }) |
5 S& P$ K; \) K$ V
//for(i=0;i<1024;i++)
5 f! f" H- R' V% P
// temp
=0;
5 {4 W( I5 ^! M5 s5 [8 y
+ Q& c! T1 G2 ?) M* a
//UPPReset();
2 {2 k! s% K* ]2 n0 O6 v6 I
/*启动UPP DMA传输*/
; _2 y' P, u6 a! `, o; w* g
UARTPuts("upp_prog_dma_i\n",-2);
b# X5 K, n, i" P; a
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% F7 E6 w7 u( @0 r+ A7 {, Y
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ B; l4 E# i2 Z5 t8 X. {
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
" B9 l# W" I; e0 X
! X! y* Y/ G7 Y2 q( Y
UARTPuts("upp_prog_dma_i\n",-2);
1 _2 g5 ^9 g6 j2 m+ ?% ~3 v
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
: F$ Z$ l" y0 Q' N9 K4 ~* Y% M1 Z
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 ]+ g& R# _% x3 S* v3 p# V, H
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
6 E9 \* @+ U; V1 p
y: a5 K4 x# k1 @6 J, v
/*等待UPP传输完毕*/
' h7 @) g1 A+ C5 a2 B
//i=0;
2 J" ]: y. Y$ `+ b0 K' |! h/ a
//j=0;
- H' D1 s, h* p$ i3 R; B
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
' B% t: @) Z0 |6 Z: u5 ~
{
) g( C! `/ }# q
/* 测试UPP传输的同时操作普通DDR数据
/ a# n) [* H6 e# K
temp
=i;
& @2 m; W& M& a! u, l
i++;
8 U3 O; L& b# p8 W9 L
if(i==1024)
+ m$ t7 }/ w4 Y
{
+ N: Y2 S7 N& Z4 F
i=0;
7 M. h, X! }+ m
j++;
% }/ O$ ^2 }, n0 w3 P& D; ]! y
}
% W; n+ ^' f0 o5 g }
*/
- ]% D- I7 h# V: Z9 k: d) `
, `& h/ V! F& q' h. R* n* z
asm(" nop");
. _1 | z9 n8 I6 b0 u9 K
/ |3 ]# u/ _- V, l: Z! N3 t
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
; E3 T% \& Z* s- g7 D% D
}
}/ g/ y ?! v; }* z
% I+ l, m- z( H! K6 |
/*检查UPP传输的数据是否正确 (loopback modes only)*/
2 n6 m/ v$ M' Z( {
//UARTprintf( "i=%d\n",i);
/ T# T7 l6 D ~
//UARTprintf( "j=%d\n",j);
. Q' u% G! c" P5 J
UARTPuts("Data mismatch in buffers.\n",-2);
3 _8 U3 m @4 V
if (upp_interrupt_count == 2 && upp_error_count == 0)
8 I! I; b9 Y, c5 V+ ?
{
2 p# h, ^ N+ U& c0 M, J" q
for (i = 0; i<upp_frame_size; i++)
8 s; q: U( X5 ^3 ^, x# ^
{
/ s6 |+ \2 j8 l
if (upp_buffer_a
!= upp_buffer_b
)
' F4 B/ y9 ]$ D+ ?/ |
{
) H+ M0 p. p e8 F) b4 x" h/ n1 K
upp_error_count++;
# }. b0 |' q; O) e
}
5 z2 E4 A0 c5 l$ x; ~0 x7 X
}
7 z+ Z L c1 S
}
: ~- u3 g' b& [, D6 a' m/ [/ G
6 H: t2 }- p! e. ]. X1 y/ w
/* 报告通信结果*/
( \$ k8 L/ u! L( I' P0 L
if(upp_error_count != 0)
: B6 p. z, T3 q" Z, P* X
UARTprintf( "upp_error_count=%d\n",upp_error_count);
& l' P/ q' ]' y
else
2 z) x1 D9 A4 z7 f" i% x7 R. U. o! w5 T
UARTPuts("uPP transfers complete!\n",-2);
* h. I" ?' }6 f& S# F( Z
" M! @$ I* K4 K" A9 ]
UARTPuts("Do you want to print all the data?(y/n) ",-2);
: F( {% N7 G9 Q( i8 m' z, F
UARTGets(ch,2);
9 {4 \7 q, a5 h
UARTPuts("\n", -2);
& ^+ A2 s0 w" \
# B' q( {$ P& ^$ Y2 z
if(ch[0] == 'y')
1 F' N0 E* i. X- p% f! V7 j
{
2 w+ o' i- B6 s( x& a9 ~. Y
/*打印全部读到的数据*/
* Q1 H" m b5 m
for(i=0; i<upp_frame_size; )
8 i. \( p+ \) Q9 ]; ~, W( k) o
{
1 s1 W; b0 U7 i# S
for(j=0; j<5; j++)
2 X; H. E& E& Q3 g/ ?
{
K# d( l- `9 o
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
9 j, _. d3 o; k4 [
i++;
9 L3 H0 l% C: l# G8 u3 X; V# O2 ]' H' i
//if(i >= 4096)
6 o( y+ h9 _4 B* q
// break;
0 w1 C: S( v `
. m1 b9 n; q) F% H, f8 P
}
) L [) D- R& |+ N3 ]
UARTPuts("\n",-2);
" O3 W+ V7 {# m) W1 h
}
6 a! Y. ]! V5 Q! s* ~" ^! U
}
- K9 H$ N6 \. W3 @! ]5 ?; I
! r0 \* z; u+ ?5 G
}
1 R# |" `0 G7 @6 U( Q, s S$ I9 `
! @2 J' G* e5 E) h8 {. B2 N
1 x# n: {) \. i! s) Y. _# o8 N
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
2 s7 r( P; F4 F9 t& a, f3 H, X! K
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
% `* ^) |! S7 Z2 J+ D7 W
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4