嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
. Z% ], Z% z$ L b6 l( A
Void UPP_TASK(Void)
" k3 V* L6 g5 ^7 S$ U
{
' p% z& Q6 O% v- Y; B) a4 U3 W- x
3 X( M7 l; O" b: c
int i,j,k,target_int_count=2;
) h- R9 Y- k1 [6 H
char ch[2];
( z0 T: r- K1 b; w4 n5 l6 L' B, ^
; p8 ]$ M* Y M1 k, w
4 H* w7 v* ]5 l9 G6 h( K
0 z% P5 Q6 Y, D0 ?
upp_interrupt_count = 0;
/ A5 a* Y R$ _$ P4 U8 p
upp_error_count = 0;
, A8 ~9 s4 |$ T8 g! u6 g% j
+ G( B) P9 q0 _; U" ?( F |5 f" {
UARTPuts("\tResetting uPP buffers...\r\n",-2);
, L" l/ a5 B3 u: r* b
// Initialize data buffers
) d. Y2 H9 _; ^% x; f6 P
for (i = 0; i < upp_frame_size; i++)
* h% Y" y* R. Q# l/ P7 Z. d
{
, w; D: m# V2 H! m" J: p5 L
upp_buffer_b
=i;
, g: T! x7 ~, y F" D. J0 u
upp_buffer_a
= 0xDEAD;
( H% ?9 T& ~7 L( f: W$ w0 ?
}
8 h$ U! n- G! R2 m% [+ L; q
& E. W8 @- H/ R6 F
//for(i=0;i<1024;i++)
% v8 ?- d K& n1 Q9 R
// temp
=0;
& z U; n! |. `& \/ e
# M% [* L: C3 o j2 ]9 n' @
//UPPReset();
, {- N _8 P" a0 G
/*启动UPP DMA传输*/
8 n3 z8 a2 j; V0 h& h8 T
UARTPuts("upp_prog_dma_i\n",-2);
p2 G% ?, L: T0 R
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
1 d. s6 _5 [7 Q7 i0 t
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 [9 w, v6 m) e% ?) l1 C2 H1 z
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% U7 p7 r) N$ X8 O% J) o
0 T6 v0 B4 `( f! U* J, P
UARTPuts("upp_prog_dma_i\n",-2);
7 W/ s8 ~/ ~2 f+ B N6 d
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
" G- l, k/ M3 r1 ~; H
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! Y, i1 {1 [6 r% W+ X
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
% K/ @$ W1 T7 t* S6 O4 x* N! ^
- O. v( P) w: y J
/*等待UPP传输完毕*/
1 ~2 a4 x# m: n5 q
//i=0;
) M7 y' ]8 l( o
//j=0;
* N, ]8 s0 A5 V
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
, r4 Y; B6 l: [% d7 J; D6 `
{
2 _$ S! ~" U2 {
/* 测试UPP传输的同时操作普通DDR数据
4 B0 H, `6 d' I4 [; E+ J
temp
=i;
, J) L' l, J( X# o6 ^% C* P
i++;
# H- p; m/ I" d3 r# a& B. i( q
if(i==1024)
* q. `+ ]# R4 J
{
/ q# L {- V A$ m
i=0;
5 R2 Z, y% {9 j$ x5 o
j++;
5 m1 I2 L" g; ^
}
: l5 j$ S7 k) e! M, D
*/
: }/ p0 w1 T2 s* [. s/ d# T
3 P! c( s5 t' M" F' @
asm(" nop");
5 E7 i$ F8 ?3 a6 f
; f2 U: f- W' I
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
! P1 s8 L: E8 W4 U$ a* c
}
/ n- k5 t; a& q( ]
# v% t, e/ i0 z7 K
/*检查UPP传输的数据是否正确 (loopback modes only)*/
C) q- j0 l4 K2 }
//UARTprintf( "i=%d\n",i);
$ S+ b& l" `7 W/ B( h
//UARTprintf( "j=%d\n",j);
6 @! l+ q7 K2 c, W4 G1 F* u
UARTPuts("Data mismatch in buffers.\n",-2);
, r( m; ]6 {* F# v
if (upp_interrupt_count == 2 && upp_error_count == 0)
U8 f$ Q$ I* c8 l1 F. b
{
7 m6 {7 ?# W+ |& X# I; W
for (i = 0; i<upp_frame_size; i++)
t% f, I! q& n( x' N+ u4 [+ M& W: s
{
) D0 ]9 }5 z" g; Y
if (upp_buffer_a
!= upp_buffer_b
)
( [3 Z- _8 i9 Z$ |- }
{
; W+ a: e8 L2 n, U6 ~* ^: R. n
upp_error_count++;
5 t! x* S* w. L S* e# x
}
# ?. v- i6 [# U" G% b& Z- k
}
% k3 h6 [$ Q1 ~1 p- E
}
; |- N% A M9 M/ H( `: @
/ t1 m7 m# b, n" g% C
/* 报告通信结果*/
$ q& l$ @, {- {3 s. b% P& I0 Q2 l1 K
if(upp_error_count != 0)
7 F( Y( S4 {4 f9 C: W
UARTprintf( "upp_error_count=%d\n",upp_error_count);
. i1 W3 K3 o2 Z# ?, j
else
7 p2 i* w9 d: F# w
UARTPuts("uPP transfers complete!\n",-2);
# [8 m* u y4 x; }2 S4 n& r# h
+ p4 T6 l# ?8 m; E8 k
UARTPuts("Do you want to print all the data?(y/n) ",-2);
0 x* X- n9 |4 E5 j, |# N. A6 r
UARTGets(ch,2);
4 l7 o& F2 u, M9 z; \: f
UARTPuts("\n", -2);
# M! n; O# R0 O- u+ f
: ~1 p6 v! O3 j1 z$ m
if(ch[0] == 'y')
1 ?& z8 s! f! `
{
1 ^- R% r5 d/ |
/*打印全部读到的数据*/
8 \$ n2 N1 C3 C
for(i=0; i<upp_frame_size; )
4 ?- T9 [' i3 m! L7 i5 }- ?
{
# h' s0 l6 _9 Q i, @
for(j=0; j<5; j++)
; M* o# d" F3 r& e5 _# q8 ~
{
# E/ {. J, r& L0 E( k4 V4 |
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
( t! X$ \8 e: b: `7 s
i++;
1 B6 @3 H5 U) x( ^! o+ [- B, x6 V+ W
//if(i >= 4096)
) ^5 {% Z5 m& x u v/ w
// break;
! a; t6 g- A( _' {4 d) H
" U* m& c. ]/ j
}
& Y5 [) \* `7 |/ J- U
UARTPuts("\n",-2);
5 W6 q# z! \% L! P4 E, i$ y `# G
}
1 I# s% m. }% i7 N: x
}
4 n2 u& Y- F/ `0 P5 y% v! @
4 ^5 v& x. s5 R4 l0 e# S1 Q
}
: U' O. }8 K+ ]8 B
9 E r. B% u7 b
5 I8 i1 {0 u8 b& `
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
1 T: d8 _- K! M8 T" y7 V
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
4 ^/ J9 J, M2 j. J+ ?, F
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4