嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
( R* M$ r/ u4 k+ N) y! K
Void UPP_TASK(Void)
1 G1 R; T- f( f. ]" o
{
5 ?+ F5 M; \1 w& k1 b* w1 @: T/ c
8 d0 C- o+ o9 o7 w5 p( s K8 B, W# `% i
int i,j,k,target_int_count=2;
/ M) f( K: e: m
char ch[2];
T. Z4 s5 h: z5 O5 F
: p: E7 O% k9 ]) m
+ e' K* _$ `; n
+ U7 z7 ^- X7 R
upp_interrupt_count = 0;
- X# J- I5 h ?% P. P
upp_error_count = 0;
4 b* I/ J6 L: H' D$ m
; h- V+ F- L! ]2 |
UARTPuts("\tResetting uPP buffers...\r\n",-2);
. s% a* r; T. q; I- L b
// Initialize data buffers
, P/ e, \! n8 h# n9 `% w
for (i = 0; i < upp_frame_size; i++)
" A7 d( j( Q1 U0 a
{
/ X: e. Q: U0 _- Y; c. O
upp_buffer_b
=i;
! l/ m% j+ h9 f, W: c
upp_buffer_a
= 0xDEAD;
4 ~6 X: V( s, Y' n# ?1 w9 E
}
# {2 L1 c/ `$ w1 q$ V& K& ~$ x6 o
* B5 O" K9 R0 f1 H$ b
//for(i=0;i<1024;i++)
1 i+ {4 l* `8 ^3 L3 G$ P4 p
// temp
=0;
+ E( X2 M2 H! O1 o; d4 R
# k6 S" Z) [9 M7 [$ [: j- ?5 b
//UPPReset();
# ~3 \" F7 u' T3 A
/*启动UPP DMA传输*/
% y1 q# \" Q# Z' P
UARTPuts("upp_prog_dma_i\n",-2);
2 f; \* {) S4 [# G$ O7 y
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
( l( V9 Q2 b" p, g, O4 D1 g
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 M1 l J$ a% b
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
& w6 u) f5 ^( L" t7 k
* a- _6 U1 H# @- L! V d) M
UARTPuts("upp_prog_dma_i\n",-2);
3 D% X8 p8 @1 v
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
! S0 P0 s) a3 H1 E
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
1 Z! C' d& S4 _4 j
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
u1 j6 V# ^5 P# J' c- K
) D5 i; M- a: [& T3 W' }
/*等待UPP传输完毕*/
5 S: V( r9 Z3 {7 Y4 Q% P4 q8 i
//i=0;
2 l4 @9 v4 v( G* ^4 a( t. H
//j=0;
' q! ~2 W7 }+ d8 h. W! H$ D* B6 W
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
4 R& g8 Z6 v2 ` l
{
( F% h1 P# S% Y: W) m, r
/* 测试UPP传输的同时操作普通DDR数据
5 K% o, h/ S6 A
temp
=i;
9 n) M, e6 W; C0 y7 V
i++;
8 h A4 r# ?3 n$ \' z
if(i==1024)
a2 ~$ Y6 u( {; B/ @9 f) X
{
0 ?- {) R! o3 i) ~' A
i=0;
1 H( ?) }6 u8 g, V
j++;
' c& K" U& Z0 O0 b$ R
}
) s1 B& r/ b% {" ^8 o
*/
# p; a& E7 Z" f7 U0 u: z5 |
# P" ^$ m, y5 Z( C2 y& G
asm(" nop");
0 G% _: _/ ?1 F
0 f; z, ^0 }2 D1 ]; l' B1 K" k
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
/ O. w# F2 f4 P7 R* @- Y+ @
}
) S& b2 M! N& ?4 b* I/ E
. b I2 k" P; [! r$ M' w1 X, z( N
/*检查UPP传输的数据是否正确 (loopback modes only)*/
. s' M- z' v1 Z8 J
//UARTprintf( "i=%d\n",i);
. ] m& ?4 ~* U5 j' h& t# g; g
//UARTprintf( "j=%d\n",j);
) u6 m! A$ q& S# t
UARTPuts("Data mismatch in buffers.\n",-2);
0 n2 ~7 f) Z( l% K# g9 e
if (upp_interrupt_count == 2 && upp_error_count == 0)
# @+ d; Y+ d r1 y
{
+ u# S! y+ R) D
for (i = 0; i<upp_frame_size; i++)
0 r0 T3 D/ n1 |
{
8 P9 m9 O' _0 A4 t: l0 K" I
if (upp_buffer_a
!= upp_buffer_b
)
5 `) ^& G, M8 I
{
! V4 X4 C3 R0 x8 v. Q9 G$ G2 ?
upp_error_count++;
7 e5 L% _9 M6 S1 o2 V
}
4 B& ^ }$ m. E& t; e8 O' z" N5 t
}
' f1 ^, g3 [ ]# G+ u# m& U' H
}
; m6 c6 V" i: h: w/ G, T1 h" @' }
+ B! e& u* H( L5 |# X7 N4 Q5 T
/* 报告通信结果*/
. J) `- B: B" H5 q- t# y2 `
if(upp_error_count != 0)
- o7 ?0 {% `% L
UARTprintf( "upp_error_count=%d\n",upp_error_count);
5 U) Q$ {+ ?3 z8 f( R/ t, u( x* ]8 K
else
' m$ S% D' V+ l8 b
UARTPuts("uPP transfers complete!\n",-2);
' ]2 j) a, j* `* q+ q9 D1 ^$ H
2 L5 I1 W. N& `1 ?8 [" F* |
UARTPuts("Do you want to print all the data?(y/n) ",-2);
# v" X% y* j* y4 \
UARTGets(ch,2);
x: w/ M# r& _- V1 s. N
UARTPuts("\n", -2);
6 I" q# ~ N4 Z2 M. I5 I! B+ C$ |
/ g$ \1 h( b. X/ O7 Z
if(ch[0] == 'y')
9 p; ~ d" K0 t
{
5 |& ~6 O) N0 |9 l8 ^) x: ]$ j8 b
/*打印全部读到的数据*/
' p* ]) C2 d2 U# v( Z
for(i=0; i<upp_frame_size; )
- Q) A) j2 W3 J, c" j
{
. W. K- ~( R# G
for(j=0; j<5; j++)
; `* W% U d2 ?
{
; ~' C4 {6 e K
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
6 X. H0 b9 a5 e- \! N. T/ K
i++;
1 [. o, [. {( a7 b% T, G0 D* o
//if(i >= 4096)
6 s/ w% s4 i$ y* `, M. p
// break;
$ K+ X0 A% J# i9 a
) J$ \9 T: c( R% z- S! _
}
6 o$ _1 D& _: `( h
UARTPuts("\n",-2);
& ~! l ^/ z( [4 S
}
2 P& M- C6 l, C9 V! [
}
. L: Y" Y1 l" `7 z) B* ~# O) r
* N5 n( N1 Q G3 c
}
/ G; b: @- A! @2 D( }8 [7 C
8 o( D4 X+ o0 x* N c0 c# ?) M
2 o- w2 b' y v/ b
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
7 F, N. \ D+ I" H
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
& c* |- D1 t" I( l1 z# I) I! a
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4