嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
1 j; r; t8 T9 P$ L( }2 ~: ]9 A( S2 x
Void UPP_TASK(Void)
7 t0 _% ^, }0 ^
{
1 S4 L7 m. V2 u" E" c) ^2 ]- j
' Y# g. J7 j9 n" T: Z0 K+ c" z
int i,j,k,target_int_count=2;
7 d% l/ u! R; H% {1 l
char ch[2];
9 B- j# Y; W6 ]; U
% w& m j; o: {( z+ F, ~
) S, t, y- V, ?( b* u% H+ H9 V
8 P, O; a% F$ d. I1 X/ O1 ^$ H% r
upp_interrupt_count = 0;
3 E, f! U% J7 r* s1 F1 n+ X
upp_error_count = 0;
$ \# p* g6 m+ i6 v9 ~* j- f
% {0 V8 L: O; X2 s, `- d4 W
UARTPuts("\tResetting uPP buffers...\r\n",-2);
6 S" K9 `& G9 W+ u
// Initialize data buffers
3 G) O& Q: A6 M7 k2 C( g: k
for (i = 0; i < upp_frame_size; i++)
" u. r( V( M' S
{
/ t& ]1 H( h8 ~" a5 q
upp_buffer_b
=i;
6 p* ~. P% _ T% C8 @, K2 X* N
upp_buffer_a
= 0xDEAD;
5 W Z Q3 ]5 y4 A6 H8 w% `6 y
}
p/ ~% q& W5 x; x$ f# h5 F, Z
4 |* x4 H/ E# A% b
//for(i=0;i<1024;i++)
9 d2 S8 m7 l) u) i" g! X( {* P" R8 R& C
// temp
=0;
; }4 X! Q/ v2 F" U( m
% v1 A, P. U! \7 l% A
//UPPReset();
; [. `) N4 B; }% r/ Y t7 \
/*启动UPP DMA传输*/
0 k" ~2 F" ]# x) m4 `
UARTPuts("upp_prog_dma_i\n",-2);
# Q, r% Y T# Z( j
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
/ A& ~/ R. I+ u9 g
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 y! d6 d4 I: q$ {2 n( p; x
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
" F* k3 i) o% z
6 h8 r4 K" C1 p8 |$ Y8 E4 o. r
UARTPuts("upp_prog_dma_i\n",-2);
) m0 _4 V) z. \5 W4 T' Y g
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
6 c! K. ?' J* g
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, t. r: T: X+ d5 ?! G0 G
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
& R9 T$ O7 b7 x# j4 Q
# B4 B* L# a0 s6 o. e, \
/*等待UPP传输完毕*/
. y. h0 v! D( I6 ~# g/ ^
//i=0;
' _2 `+ A1 {9 C H) k
//j=0;
* u* D8 k; X6 M
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
7 Y0 \. D; K0 n" ?9 P2 l
{
2 o; n @! d1 P- Z- S
/* 测试UPP传输的同时操作普通DDR数据
" ~5 r0 W8 n/ ^3 `; p7 F
temp
=i;
3 B- A* Q5 x9 P% g& s1 N, J: S6 g
i++;
! \- ]6 c1 s% q. A3 S' x
if(i==1024)
, k' N& h/ G R7 Z1 q1 _0 H- v; U
{
1 N4 }$ N7 U- H' a8 O- D3 g
i=0;
2 u" u0 K: b$ ?; a8 y
j++;
* Z, L f& p- E5 F i
}
1 b) B; @) e# s3 N3 x
*/
' S R% q1 P8 F& ^% K
6 b# v( L$ N6 ~
asm(" nop");
7 A" F' G) K, K& q
! B& o' E8 X- }3 Y
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
+ A+ J- `; t4 @ [0 B
}
% O( w1 }) ~0 U% x" ?* z
0 ]1 k/ p6 S/ N0 C
/*检查UPP传输的数据是否正确 (loopback modes only)*/
" k* v" a" N, h; [: U
//UARTprintf( "i=%d\n",i);
; b, Q( U7 N$ b$ u4 ^% O' h
//UARTprintf( "j=%d\n",j);
; w2 \% S$ u" H
UARTPuts("Data mismatch in buffers.\n",-2);
: m" Q- M, C! U4 B; h6 ~& B. O- h
if (upp_interrupt_count == 2 && upp_error_count == 0)
( t# G M$ Q8 U8 e: G9 S
{
& P, V# j' I5 ]: L2 y0 [
for (i = 0; i<upp_frame_size; i++)
% p! S/ y; n4 X, ^" {+ u9 S
{
, G2 C/ d: e+ |( ^5 E* ~ s
if (upp_buffer_a
!= upp_buffer_b
)
8 |4 v5 r% H' R. t# z2 C
{
9 Y# C2 I- h t6 \
upp_error_count++;
' P; d6 I( H5 z9 e7 l1 q
}
, r! [7 Z: d( q! k8 r
}
! L7 t3 l6 m3 b2 R
}
+ z, L& l+ }" C8 ]
0 l* b' c# z8 P/ y+ k+ B
/* 报告通信结果*/
7 |6 S. B3 k1 [& J
if(upp_error_count != 0)
/ u" ~. e" \) \# m( B L+ j) ?, L4 ]8 w
UARTprintf( "upp_error_count=%d\n",upp_error_count);
6 N n2 K' D6 N! W$ S4 z8 [2 ?1 ]) W, t
else
$ C: r8 q; U( \
UARTPuts("uPP transfers complete!\n",-2);
. @5 K9 N4 ]" m o, Q
: e$ _9 Q* k, W3 B0 u2 Q( B
UARTPuts("Do you want to print all the data?(y/n) ",-2);
+ j; C; n8 x6 S' \
UARTGets(ch,2);
% i& ]/ T) g6 g; _
UARTPuts("\n", -2);
3 t, @' C4 g0 ~( ?9 l
+ D7 g$ [8 G/ o$ e' r6 u
if(ch[0] == 'y')
- A1 N) W7 `" @, ^
{
: k, m7 L6 i" |. g
/*打印全部读到的数据*/
& R; ~) W5 T( q R1 ^" q
for(i=0; i<upp_frame_size; )
$ \& Z% u9 |! Y0 S+ t
{
) m. z- z- N# ]6 P% i! L
for(j=0; j<5; j++)
# v6 c' a5 J* B6 w- _6 ?1 I4 K/ \ A- f
{
5 j8 V2 N' _$ x0 B8 U3 L ~' g
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
& S1 w/ {4 U7 o
i++;
4 I, Y( L& p" M$ [
//if(i >= 4096)
, R- E" x/ p4 x( Q
// break;
5 q, \: l4 ^) c+ B* W
+ x1 ^7 Z. _( F R" A
}
$ R* G- V# z9 m4 R& J' a! L- n
UARTPuts("\n",-2);
: B, X1 u, \1 ^: q- ~& |
}
! F/ W$ O8 J# W5 e- Z. C
}
* e5 o7 L Z0 ]- E2 `
+ g$ ^$ g m$ i" S; g# }
}
) i5 v+ a) u5 F
! h2 K4 b, t- w& F4 r! `$ g5 F
$ x/ v# t- y$ @+ R1 [
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
( I/ D2 O" g; c* R d1 ~0 }
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
- z* P5 @ g7 d# Z
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4