嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
0 q" c& c; L" R/ G/ V1 M* i
Void UPP_TASK(Void)
$ z2 g0 a( ~ A) ~1 u+ {! ~
{
" j/ q8 j* l. s; z" Y, E; c
; o, d" U2 K2 U8 S0 q
int i,j,k,target_int_count=2;
% L4 s* n& a [, s0 ]
char ch[2];
/ q- I; |- c9 K) [( }) C" c+ }4 y0 m
, ]8 i" Z4 W" W# }
' R" A6 u+ H( w t( ]
. _, ^. N7 A& e! m' e
upp_interrupt_count = 0;
. Z% z V0 k( c/ h/ e
upp_error_count = 0;
- Q4 V. p- |3 u
' H' t2 g( @1 T5 G$ q9 q
UARTPuts("\tResetting uPP buffers...\r\n",-2);
& j3 B3 l1 t& R4 ]
// Initialize data buffers
1 |% B f j4 W0 x% m8 r) W
for (i = 0; i < upp_frame_size; i++)
' O: }# E5 L( `6 D
{
+ L w( F2 e8 a) t1 B) J" |- v
upp_buffer_b
=i;
4 D# v, p; \0 N+ K& O7 b( w
upp_buffer_a
= 0xDEAD;
" s/ x5 w. @6 e" s% k
}
) y) |0 d# R; U; M* M$ U: s) m
# l7 Y) n( _, x& I
//for(i=0;i<1024;i++)
# _' G+ K' y9 P
// temp
=0;
9 f( L; U$ I+ g
1 A& v+ v" u: _
//UPPReset();
* Q# C! ^' s; H0 h
/*启动UPP DMA传输*/
$ F" y* O/ w p5 M
UARTPuts("upp_prog_dma_i\n",-2);
5 f7 _5 o9 e: p) R5 E" s
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
0 G: C3 O; H2 A5 v) B z
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# h/ {; y( y5 G9 b
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
# ^, \0 u% p; J7 m# F
, V, U- S; N, U. D
UARTPuts("upp_prog_dma_i\n",-2);
8 c% a2 Y7 m$ W" c
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
! j% u6 |* i8 N# G) I+ q
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' z9 ~( L# A* T8 y% z; F( o
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
8 y. _) v" I* J: f+ _+ `
e- I7 y6 D Z4 I# T; N. s- s
/*等待UPP传输完毕*/
- ]# G j1 a6 t) i
//i=0;
2 H0 S- }, h$ y" R
//j=0;
/ Q" j3 d4 b5 z$ {/ W6 r
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
z8 [) I/ s: `; u5 h. Z/ V
{
% M+ u. ]( ]# _9 h
/* 测试UPP传输的同时操作普通DDR数据
0 B: m! z+ `0 D; |
temp
=i;
]( f% l. u$ y# t0 K+ P+ X6 \
i++;
3 z, w" d- Q0 e' N+ {& U
if(i==1024)
! m2 L1 P8 A, }2 t" A* I
{
4 D3 y/ Y% E: g
i=0;
* ~" O- M0 c+ h* _. `
j++;
% {# \) ]( [ `1 i4 U
}
, U9 K- w6 D+ `+ j" G% K, k
*/
$ T9 k6 n S5 ~" X: r8 ~
8 W' n; f# g5 V0 g: P' ^( t" D
asm(" nop");
/ b# k# x" E7 I2 T! ~
/ e& f5 A! f- I4 B8 ?
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
* d" I& k0 j# x. Y _6 b$ Y
}
" {2 |% ^ J& P" }* w+ \
: }" q6 u/ m) B3 i7 F G" |/ F3 h7 c/ m
/*检查UPP传输的数据是否正确 (loopback modes only)*/
* R5 o% F. D" z2 x6 A
//UARTprintf( "i=%d\n",i);
) z$ M. @2 ?9 s+ M6 b$ }3 c
//UARTprintf( "j=%d\n",j);
% ^2 ]! M4 J& Y3 Y* Y
UARTPuts("Data mismatch in buffers.\n",-2);
1 h; p3 @) H+ u/ H( s4 U
if (upp_interrupt_count == 2 && upp_error_count == 0)
% n4 p% l* k& ^/ A) R4 i% ?: G
{
9 ~8 U) G, u$ c' q+ R" U3 U a5 n9 A
for (i = 0; i<upp_frame_size; i++)
% Z4 u4 Y. y& p/ ~" _
{
2 L6 R4 S0 |7 q+ m1 d' W" ~
if (upp_buffer_a
!= upp_buffer_b
)
- |7 B7 w3 v0 L- N: p2 s
{
% X" ^ w. F g5 I/ u& d
upp_error_count++;
& o4 [: h* [1 `+ X6 J
}
7 S8 Q' Y& }6 b
}
7 D8 q$ L, q' m( p/ O
}
, l+ ^0 u# P! G2 x% J
6 Z+ O; z: x8 Q8 a! Z4 ?
/* 报告通信结果*/
5 m8 F3 Y/ A! _0 Z
if(upp_error_count != 0)
/ ~+ X/ {8 J, E4 d6 |- U1 b
UARTprintf( "upp_error_count=%d\n",upp_error_count);
: e8 j9 s( `5 y4 X& A! e: z6 m( p
else
) \; ?2 `# U. G& K! M
UARTPuts("uPP transfers complete!\n",-2);
$ x! b" F' B' C( Q- B* ~
1 ?/ k. X# ~" ~+ C( n8 [
UARTPuts("Do you want to print all the data?(y/n) ",-2);
7 f% v. [# [1 I% P
UARTGets(ch,2);
, L/ F y/ _, X: i" B% Q
UARTPuts("\n", -2);
5 u% `0 P3 L, r Z" s
0 x4 t; C- C# t) F1 P( z% j: x
if(ch[0] == 'y')
2 C8 I9 l* q% h
{
% |* `- k1 r2 F: G3 r$ F, _/ T
/*打印全部读到的数据*/
0 ~3 F$ q# E( o p8 @2 Y
for(i=0; i<upp_frame_size; )
/ p3 f* `( Y4 I2 I: ]
{
8 v; O7 F8 }6 U$ s
for(j=0; j<5; j++)
9 y4 f1 c5 e- ]; B
{
1 f9 A( {) ~/ `" e) o/ I6 w
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
4 |0 L1 `& X" O/ p( Y, |2 ]
i++;
( Z: N& m3 ^0 }: D3 D' v) n! m
//if(i >= 4096)
! n' c' y D: c8 A% ]
// break;
1 |$ u# g0 z( T# ^
; b4 Q; O8 X- t
}
( m& ^, r [- k: {
UARTPuts("\n",-2);
/ V$ k% a0 r& @: X+ O* I
}
, o3 h, J; ^# {9 S/ R
}
) I1 k6 @- Z# _4 Z& r
! j+ W! i5 g2 I2 J- D/ q
}
- T l' l) F9 ^: w2 [
; A8 N! x' C7 y( v
7 \- v' O/ j! ~. C$ v s6 t
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" x* K+ L( K: x% r" y3 v
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
& F, ~; |% \) q e: L( m4 Y4 ~/ R
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4