嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
1 ]% O$ Y. Q) ?# T ]* q
Void UPP_TASK(Void)
: K& |4 |' H, ]/ s' I5 X6 m; u# p
{
9 h$ {2 y- S4 U6 u" D% l
T" k7 v$ ]+ A6 Z
int i,j,k,target_int_count=2;
2 j" S y2 Z& d+ f
char ch[2];
' A4 N7 R1 a: p+ v9 K
5 t$ J; r% d3 }2 ?
. f1 ?* d$ a1 ^: V5 W* ?' K
" |) a, G. s; `/ @, N: ?. j" I
upp_interrupt_count = 0;
# n# R# y2 P' c* P: ]( ]
upp_error_count = 0;
5 Y+ g4 Y7 x8 E6 ^ {
* S' u+ ]; o1 p* I% C/ w
UARTPuts("\tResetting uPP buffers...\r\n",-2);
+ e. r9 Y: P, O3 \. n
// Initialize data buffers
$ d4 |- t, a* _# b' B& |
for (i = 0; i < upp_frame_size; i++)
( c' |$ i4 E8 i2 S
{
) b3 w2 x7 y1 [$ ]7 A
upp_buffer_b
=i;
% C+ e" e3 e' x1 c. q$ }
upp_buffer_a
= 0xDEAD;
" N# G# w. j" D2 u5 z( ~
}
0 \$ j8 E, V$ }% W2 n# ?/ l' K
}! [" h0 p+ D5 E; S9 U: P. t4 S
//for(i=0;i<1024;i++)
5 ^( r9 i8 Z4 ^- X) |5 z
// temp
=0;
. x& N5 x1 ?% @$ k( ]% @, d$ \) J
: ]+ T8 t* r0 N
//UPPReset();
8 D2 ]; s o# B+ N$ n
/*启动UPP DMA传输*/
! }0 i( E+ U1 T5 l0 D
UARTPuts("upp_prog_dma_i\n",-2);
. P' q0 O$ u" N( O7 ^" h
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
2 h1 L6 c* L; B( F& Q' @
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 N) p9 n" L6 z& `4 x
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
+ {5 ~) j) j f8 N2 M( u
6 l3 _4 u" l0 ?) u5 F( M- v
UARTPuts("upp_prog_dma_i\n",-2);
5 d; W- P! i- Y7 R9 b" Q( ~% D8 a" w
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
; V% R- {2 T5 t, h9 w
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ E, s" A; r; S Q7 W
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
+ I) ~' c7 R5 ~5 g0 j! i
/ D; m. E- Z, X8 o& r' _" u
/*等待UPP传输完毕*/
8 d5 r! F: c d
//i=0;
X0 y/ x6 k5 k. C% K/ r# r5 W
//j=0;
6 d5 t) P6 T0 O. z) I0 v2 V
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
8 G* K" I2 Z% J. [
{
% H) K s: I8 h' C: s! A
/* 测试UPP传输的同时操作普通DDR数据
7 g% @/ G! B& ]' W D9 h
temp
=i;
/ I. V# t7 } ]2 _- l
i++;
3 A- g( `( e" R+ A: J
if(i==1024)
1 b2 y( V; A, ?) r
{
2 }" b; K1 ?7 K$ L
i=0;
' W8 i4 L' H: R- S& J1 G
j++;
3 D& d2 p$ M1 h/ q& v
}
2 f/ y5 _3 q$ i9 l
*/
[7 O( J) [( N# G. z
! }; L, Z0 @3 K N
asm(" nop");
$ A! L) f1 R1 P1 C- k
" J# P% L/ |. z! J. H9 I
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
2 J. m8 l l" w; k; h. s8 H' r
}
! R7 z0 O2 v- k* s5 s/ V! H h
! P* O+ j2 z# {- Y4 T% s) w* O, o
/*检查UPP传输的数据是否正确 (loopback modes only)*/
) x: m' v+ ~+ P- v0 B$ R
//UARTprintf( "i=%d\n",i);
, b0 N {0 U9 A, |' U
//UARTprintf( "j=%d\n",j);
) B! |( @3 U) L" g+ q
UARTPuts("Data mismatch in buffers.\n",-2);
" u8 Y5 s# S" |& V9 H' n" e
if (upp_interrupt_count == 2 && upp_error_count == 0)
' \! N( F D" U: d1 X: U
{
+ M6 D- P% i: w! `
for (i = 0; i<upp_frame_size; i++)
2 ~( D& I& [1 m& O9 C
{
" I) H$ `) |& k
if (upp_buffer_a
!= upp_buffer_b
)
( E* R* z# L7 u; ?
{
* k+ z$ {2 @. G
upp_error_count++;
- { b5 a4 y0 e/ z) K4 j6 I
}
+ I+ R+ O0 n+ H+ J( \2 m
}
. T$ T& A6 z$ X' [ a
}
: Q& `0 _2 e. ^7 r4 L
% m# Y/ W) u$ x2 D6 A2 ?
/* 报告通信结果*/
7 x1 O1 F' Z" h/ ]; c
if(upp_error_count != 0)
: S6 W( W' A5 c" S. m
UARTprintf( "upp_error_count=%d\n",upp_error_count);
% D4 A. i+ }: L# K7 l, |2 f2 Q
else
1 ^7 |9 F, z) y7 Z
UARTPuts("uPP transfers complete!\n",-2);
$ q* e4 Y& g6 u: K8 P q$ U
3 s6 A+ V' u( `: ^$ \
UARTPuts("Do you want to print all the data?(y/n) ",-2);
, E: `* I$ v* c
UARTGets(ch,2);
1 R. _! Q+ \7 y4 D
UARTPuts("\n", -2);
, m3 Y9 x0 x8 B
! @0 C: o7 P9 r$ u5 h' k3 |
if(ch[0] == 'y')
' o: R, S. h5 T
{
" s0 D9 e! L" v+ s6 K
/*打印全部读到的数据*/
?6 a8 ^8 P0 R, E+ d6 C
for(i=0; i<upp_frame_size; )
; i' y( u8 P( I8 k, [
{
* w/ l' | i* A. h! q2 |% T! A
for(j=0; j<5; j++)
2 Y2 ], p; y8 f, u1 p% G
{
. _/ M3 a. b) K" T; `. s
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
' s/ g( o* W& @) z: z" ]
i++;
$ o' U. G! V" \1 u, X" e: ?
//if(i >= 4096)
; Z B. Z5 k, I; a4 G
// break;
/ w( z8 @! [. z% k. C5 x( M# }
* U+ c/ K+ w( y9 q3 U% Q* ~& o9 Z
}
; B% y7 {$ ?6 x( @6 V; l" L7 g
UARTPuts("\n",-2);
; T4 q+ I( a0 S% w' D. X3 D
}
1 H, y3 z5 X6 X, h: i& O* d3 S
}
7 ]( z) ]; o `" R$ U) `2 I, ]& M' O. K
4 J3 p% x# B1 z- f: F
}
/ h0 z- ]8 g6 G p: m
8 z! j" m$ _% [; D+ l* \. p
7 i7 Y0 Q. f: ^* L$ r
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
% r( y- I% l1 }( w2 N( `% B6 }
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
( w& j' @4 I! N
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4