嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
2 T& }9 q; k3 h
Void UPP_TASK(Void)
* [, a0 |; l+ y7 D9 ~7 a; k6 j; l' l: b
{
2 \( C1 ]& }3 Y" S
7 E, Q; s+ I0 ] t" Q
int i,j,k,target_int_count=2;
# i5 G: ?$ ?# K! S5 K0 G/ G
char ch[2];
|" h& z" |# [9 l u2 c3 `
7 @( O) f. r& E. A. L! f
* M M6 d0 w, V+ `9 J' G
9 A, x# S4 o( q8 G3 n* h6 u
upp_interrupt_count = 0;
& A( s; k* u& G; T0 F) k
upp_error_count = 0;
# I) C; S+ [: s+ I, Y; @# Y
3 t! X8 Z1 |% \; x; @
UARTPuts("\tResetting uPP buffers...\r\n",-2);
9 ^& i4 i* j! D) n3 e) G# J* U W2 v
// Initialize data buffers
# {1 X* J# {9 C9 b( Q/ }5 B
for (i = 0; i < upp_frame_size; i++)
8 q8 Z; h4 a8 T
{
9 H5 w6 U5 H/ T7 o& v: @
upp_buffer_b
=i;
" L0 ^& [) K! T$ a
upp_buffer_a
= 0xDEAD;
$ I, Y( M/ N) Z& L: t
}
; E5 y: q$ z# e$ \8 M. ~- ]
7 B# F K/ d# Z7 s+ U3 A2 I7 N
//for(i=0;i<1024;i++)
3 [( a! l" W9 S3 t
// temp
=0;
; E! @: I& I. b, \ f) T
$ C7 I- U b" {* l
//UPPReset();
5 c: }" q! _* @3 e
/*启动UPP DMA传输*/
5 G* `. W( Q: w3 }' t: F
UARTPuts("upp_prog_dma_i\n",-2);
- K0 T' M/ a* ]. V# K/ s
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
# ?& d& t; f/ f5 C0 o
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
B5 {7 R* P6 f' L
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
' S1 l. N4 G/ K
1 w+ G3 a9 G Q0 j2 M
UARTPuts("upp_prog_dma_i\n",-2);
/ | j' U8 p6 P9 C7 O6 k
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
, M: Q* B$ r7 M- _2 d
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, z0 e! c0 U+ z1 \; z. \& v0 L
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
u5 `$ L8 ?6 u9 ~
7 c$ N4 ~5 O# G; {' H
/*等待UPP传输完毕*/
; |4 y) K# Z$ s* [4 T1 X- f
//i=0;
) _( _0 a: B, C3 `: d) Q
//j=0;
# H9 {% T) U; B9 q0 {& i. P
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
8 j8 h. g" D7 V( k" E- r) f, e$ |
{
+ W7 x* |( N( r( o/ y+ h( r
/* 测试UPP传输的同时操作普通DDR数据
4 [. E& x- B3 s+ M
temp
=i;
; g0 J8 }1 J) I& p2 W# |8 h- s
i++;
( ]$ D* A/ l7 U( @ G- y" o$ F+ G# n
if(i==1024)
( Q! i$ X- _2 a7 K' R- f
{
' }# x2 z( s- L5 `
i=0;
& T9 P! U: l1 R2 l# z/ f! v# R
j++;
]& C& ?6 x5 X: h
}
: H3 Y M3 T$ K5 W
*/
* B3 e1 @, O7 {6 \) S
6 O7 P! i P% ? y! \
asm(" nop");
% Z: T7 u; R& E# u+ F% B6 R
* r* l% h8 O5 f9 V2 |; [
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
; v8 q- R1 t& w9 l3 ~/ Q6 p
}
7 K" l; ]# o, W- Z" v) p1 x; M. R
% z* H/ d7 l" ~2 g
/*检查UPP传输的数据是否正确 (loopback modes only)*/
^; }9 |2 ~( w8 e, V4 \
//UARTprintf( "i=%d\n",i);
+ G2 Z- G* h/ r5 ?3 @' x
//UARTprintf( "j=%d\n",j);
% W) y, y- n7 t% d
UARTPuts("Data mismatch in buffers.\n",-2);
7 _2 v' O" q' A
if (upp_interrupt_count == 2 && upp_error_count == 0)
& o3 \4 F( J1 c- k
{
4 B# Q0 K, E9 G6 O6 q# e
for (i = 0; i<upp_frame_size; i++)
9 L( p% t u* o6 W' d# J2 |/ s7 {+ [
{
! |$ I6 ~; }0 V7 g1 L8 D
if (upp_buffer_a
!= upp_buffer_b
)
( _# M( v" A# W% g+ s7 r
{
% H: X( r& V! j! {
upp_error_count++;
1 a% b0 o# [5 s4 z) C5 D
}
6 S! A: o; {1 T+ j$ }
}
; q7 j1 e( a) h
}
( q" O* J) K! ^3 _- m. S
- X* p. P! o3 v. t; _% l
/* 报告通信结果*/
7 [3 ~+ h; Y4 D+ Z
if(upp_error_count != 0)
4 L5 r$ M, g2 ~
UARTprintf( "upp_error_count=%d\n",upp_error_count);
! q& S2 a7 m) b# o$ n, v; l
else
% L/ R9 P# h- l% X1 Y% c5 s
UARTPuts("uPP transfers complete!\n",-2);
, c5 p8 i4 u! _: k- f
; R% o Z& w6 X5 E
UARTPuts("Do you want to print all the data?(y/n) ",-2);
% C5 \8 A* ~- m! Q
UARTGets(ch,2);
8 S' H) W. U' ^) F, i& r
UARTPuts("\n", -2);
& b- y4 A& \1 b; ^, q$ ]1 d
% R% i+ e6 D+ j8 K, f" ~! O
if(ch[0] == 'y')
P; w8 @, o H! B: M k: d+ ~( P6 p' `1 V
{
0 `. _! m8 k7 F" {0 [) D; g r
/*打印全部读到的数据*/
! \; |( \2 Z ~/ q
for(i=0; i<upp_frame_size; )
# ^+ U3 C( [0 t1 k
{
, p) B; U% {2 m0 C3 C/ r' p
for(j=0; j<5; j++)
; @0 K* w6 B0 N* B- y7 @
{
3 K' l8 A( ]$ O3 ]& r/ M
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
5 M/ r; p: u7 r' N" s8 c4 q6 ], m
i++;
. v, l3 A# @1 F% a( m8 I- R
//if(i >= 4096)
0 i; E* p% p4 i8 ~1 b! i
// break;
$ Z+ W3 G9 \$ i9 p
s/ K) X7 X3 e+ O
}
2 a+ K2 s7 a! n& F/ p; C2 N+ Z6 J
UARTPuts("\n",-2);
$ t Q2 \% m/ [% W( `; p! w, t
}
: v( Y$ K7 Q. R: e0 t: _
}
) X7 \8 `$ l' G- L9 @( A
- ^) g+ x' c/ `; b2 |: u
}
- u- |! q [' v& _& c7 v J' Q
m- E. M* E6 [. x8 \
$ j S, i" Z. X. G, ?' R3 e5 w
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
d5 R$ H! \. l! N3 O
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
( o0 X) [( Y' W, q% H! O% c1 |. N
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4