嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ {7 K' A9 M: c2 F2 \) K
Void UPP_TASK(Void)
4 c9 I1 }+ Z& {( x$ N. P; u' O
{
1 u5 E; ?9 V7 M) t2 X& R
" e( I! K- b, T# e( }
int i,j,k,target_int_count=2;
( Q C0 q, C; K6 d
char ch[2];
# _2 S$ T' y0 q1 v; j( a
9 {, n4 R: w' v. Y
: ~) S/ @, P. G2 k+ u5 u8 V
. h! D1 o7 R+ _/ i
upp_interrupt_count = 0;
1 x, `, e T* i' Y y
upp_error_count = 0;
) `6 e+ \2 e% P! m7 [* S0 }: [5 G
$ H1 T9 h; H2 K# S& L
UARTPuts("\tResetting uPP buffers...\r\n",-2);
7 W# q. s, ?9 U0 u9 a
// Initialize data buffers
( A. y$ E, e5 v3 p( v, E$ D: V
for (i = 0; i < upp_frame_size; i++)
. j3 r2 B$ Z7 [( A3 D) d
{
# y1 j; d! D6 O# Q( P2 @3 X
upp_buffer_b
=i;
# h8 m- [& R+ n: Y" X6 k( d! m! X2 g
upp_buffer_a
= 0xDEAD;
4 K2 q* Y/ x0 x' S1 |0 ^/ e
}
: b$ }- q$ t$ k8 R
# s5 f3 H4 ?( q1 w, ^$ \9 ]% K3 J
//for(i=0;i<1024;i++)
j% a2 W' Z7 R
// temp
=0;
9 T5 p/ _( x' l6 q% }% N
- Y) \* @8 a6 h2 u& g+ k% K" G
//UPPReset();
* E9 y- g. h/ m' q. k
/*启动UPP DMA传输*/
/ Q2 f+ U3 L4 Z
UARTPuts("upp_prog_dma_i\n",-2);
0 j1 z) K+ H, P: ?3 s
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
! y' p; V- F2 A
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! D! |' s# i6 {) d; U9 w
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
& M& |8 Z9 Z$ m7 q/ g
2 q* y6 P: s. E2 E/ B Z
UARTPuts("upp_prog_dma_i\n",-2);
4 \3 S- p/ F6 |" w8 J, j1 `
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
: l: ]$ k( C( ~& z, f
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 `+ m& `" u7 n4 M
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
0 `' r1 @$ m4 L- _0 u
7 W r2 n0 t r+ G
/*等待UPP传输完毕*/
2 z4 r8 p$ Y; O; N
//i=0;
- P- N3 Z; F# j
//j=0;
( J4 ~" b, | | p2 e3 |) H
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
z' Z2 f4 @4 ^! `! f' h$ u1 g- U
{
4 _' p/ s! |8 C- k& B
/* 测试UPP传输的同时操作普通DDR数据
" X; T |: ^3 ]2 _0 L% a
temp
=i;
7 u/ V! N' X* k7 {6 E! e$ E* `
i++;
7 ?6 G8 Q& d7 X4 L4 u
if(i==1024)
3 h; [4 G; {. A8 D, A
{
5 |( g' ~1 n4 s- I% k
i=0;
9 T7 Z j3 x8 `- g* V
j++;
! C/ y' K2 @0 F
}
; W9 q/ s7 l- D& q" n8 Z# c/ n6 h- Q
*/
1 F: N# b& s2 m3 k H
3 L+ i, y. t$ R) {# L
asm(" nop");
8 f) f Q9 H; v4 M8 _3 I2 M& {3 n9 N, w
/ {5 C$ J# Y6 e7 d: B
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
# B( Z! W2 e. z: L
}
$ e6 L2 a; B0 ^1 |/ }' Q9 Y
" }. V/ H4 `8 c+ f7 g! i
/*检查UPP传输的数据是否正确 (loopback modes only)*/
; m' j' _- {8 b) U$ }* g
//UARTprintf( "i=%d\n",i);
- @$ k1 f" L$ L2 ^- p
//UARTprintf( "j=%d\n",j);
* Y/ {3 v, J, _; _$ t$ N! z
UARTPuts("Data mismatch in buffers.\n",-2);
& Z+ s# M; X: r, H' Y1 f. Y3 M
if (upp_interrupt_count == 2 && upp_error_count == 0)
8 c4 L+ u# {& n, m& @6 ^
{
! {) g. B" }' ~ G8 R+ h
for (i = 0; i<upp_frame_size; i++)
/ K" A0 h& @$ T% P1 {1 B
{
* f+ m1 K. E7 z$ [0 L( G
if (upp_buffer_a
!= upp_buffer_b
)
6 K- y; |! ?! ~" U! B @
{
# X5 f# A' ?) G7 G2 V
upp_error_count++;
: q/ v. _6 Q1 w, x) A$ H
}
- P( b2 U3 m+ E9 i
}
( R2 K1 G& s" L4 p; Q! \4 h: f2 A
}
. |. G g1 d- ] y( l
" J$ G4 B" Z- M
/* 报告通信结果*/
8 X* m* M: D) J2 s6 u3 ?. P
if(upp_error_count != 0)
- v3 b# S4 U3 p+ R9 o! v
UARTprintf( "upp_error_count=%d\n",upp_error_count);
w: a) C) {* T% w# M Z
else
/ ^' e) P$ p% G
UARTPuts("uPP transfers complete!\n",-2);
# p7 Y- b8 u( B6 Q: [" N* D4 a
: z% @/ S$ p8 l4 A) d
UARTPuts("Do you want to print all the data?(y/n) ",-2);
# Q, M0 o! W* z- x
UARTGets(ch,2);
+ h5 f7 I W9 K3 M+ w
UARTPuts("\n", -2);
5 B: [+ p9 l/ `2 n
5 q/ Z$ d- `7 R7 R, K
if(ch[0] == 'y')
: S7 N0 P1 R R2 g v. _
{
4 w1 |8 c& w7 B6 `. f
/*打印全部读到的数据*/
, M# Z. V9 f1 R8 Z- F, d# U
for(i=0; i<upp_frame_size; )
5 H8 K9 F6 Z7 y5 x) i/ {5 K- s* U( v
{
0 s* s% ^6 R, e
for(j=0; j<5; j++)
$ X# W* S0 M6 H4 _+ }; k
{
' m! m. _, ~ f7 }
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
% s3 v3 W) |' G" G+ L
i++;
9 L, C/ j$ m, s
//if(i >= 4096)
: r1 y7 F) ]3 V* ^
// break;
! ^4 ^ ~4 l; V& W% z2 a8 r
+ K r. w! w* X2 L. j
}
7 W. n/ m9 X2 I7 S/ a3 N# n
UARTPuts("\n",-2);
- q0 J8 f' R1 R) X4 l$ H
}
$ |7 B1 p( T: z# S" p8 k8 z& q
}
2 q1 n; t: b& t9 b: _6 s
- m. [- Y+ P0 ^, q' ]+ n! A* d
}
$ y. \7 H2 z+ ?" _) W
( `0 l) h& K( h {. ]
, G" X" f* v5 x/ Y' G
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
) @& H! ^; a$ h, J' l+ \
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
" n" q3 o' C7 w# A& _
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4