嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
) K! j* r) g' r) k2 w, j
Void UPP_TASK(Void)
k, ^( R1 Q6 m' [) A' K9 B5 W
{
1 N. K% L, U( e8 _* o7 O4 u
; H) |, s( [8 j1 N) r8 b
int i,j,k,target_int_count=2;
4 k* X7 {) U/ V! s- {8 O
char ch[2];
" Q( b% p" X# l( v* s
$ q6 t# o' T. a8 j1 e, I, h
3 |' D6 J3 |% |$ c5 s0 t$ ]
' k( _0 [- \! z
upp_interrupt_count = 0;
/ {+ q! l- O8 i5 U# k" X8 H
upp_error_count = 0;
# D' k1 ]# `% ^% c# c
2 U7 w7 z9 h8 {
UARTPuts("\tResetting uPP buffers...\r\n",-2);
% Q0 r" p6 v1 [* O# v
// Initialize data buffers
4 R0 Q) q2 [. @) a$ a1 F6 x) y
for (i = 0; i < upp_frame_size; i++)
. j e' K: p4 ~; x4 x: n( E& }
{
1 u% o, @9 w1 J/ s
upp_buffer_b
=i;
/ o8 b2 T- W! a F) U$ ~
upp_buffer_a
= 0xDEAD;
. g; g2 Y1 q5 _7 l+ v
}
( ^9 Z) S6 `5 W/ t/ b
1 @( U1 h- Z8 o9 ~' }
//for(i=0;i<1024;i++)
0 n! l& m3 h( M0 N6 H% [
// temp
=0;
' g4 q3 H% [4 P' `7 q% \" W
/ p# H3 K" K+ v, M6 g
//UPPReset();
" t) j+ f2 ^' A' @
/*启动UPP DMA传输*/
( s) |& q: B9 J3 n( ]3 ^! W0 K
UARTPuts("upp_prog_dma_i\n",-2);
* b+ U, t5 l+ i7 n& t( y
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
# i. ?1 k+ }9 w/ K: t, l, {
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# d3 T) N% u6 Q9 h- g
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
W* n- |4 z) O* v+ E
6 v5 m0 z: H6 K
UARTPuts("upp_prog_dma_i\n",-2);
( o3 `& ?* ?( a3 ^: B
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
( F8 p# C; _! c8 z# Z
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 m4 E6 {8 y' L) \& k$ A2 i5 v9 s
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
4 J" v# X9 F% \6 X$ z
5 S; E2 p3 t8 x" T7 y* B
/*等待UPP传输完毕*/
/ ~1 N1 m6 s5 ?
//i=0;
* O! H& A6 l. C
//j=0;
9 i% h7 d4 ~. i3 G
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
' R5 e8 X) @+ a1 {8 P6 [
{
" X5 V4 E1 n( y
/* 测试UPP传输的同时操作普通DDR数据
, }& ~9 H0 o: z$ s
temp
=i;
. ]/ G% A* Z6 J$ d
i++;
8 S6 E+ b$ \! ?
if(i==1024)
, {1 ?1 |) `6 }" L0 V/ G
{
) S* v5 f1 B; j" h3 Y: }6 l' _
i=0;
" Y2 M6 o: J- ], d! ~* | {# a/ X9 H
j++;
A# d; k* C! X- k5 E
}
! S6 ?9 s }6 j3 S
*/
) D. D% B, ]/ ^' m
8 W0 X# O/ e# }' @3 _( Y
asm(" nop");
5 V1 I9 J- J. q
" c( X* m; J. I8 X" J# N" |
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
3 C0 v& D) j0 M+ J1 U0 \" R7 q
}
& H6 y+ P, t+ Z2 f
. a) Z- F5 {+ R' Z
/*检查UPP传输的数据是否正确 (loopback modes only)*/
: }" r" Q( z0 n# ?2 H
//UARTprintf( "i=%d\n",i);
( ]5 l! G4 s$ w
//UARTprintf( "j=%d\n",j);
$ _. c% s8 P) j
UARTPuts("Data mismatch in buffers.\n",-2);
3 E5 h3 n# @+ y2 @2 H
if (upp_interrupt_count == 2 && upp_error_count == 0)
; Y* V0 G& _# J) U5 L$ \" E3 k2 F
{
" V! D B6 _% t& n4 o
for (i = 0; i<upp_frame_size; i++)
6 n/ W5 }' s8 o
{
9 X. P: i) ^+ v8 L: ?
if (upp_buffer_a
!= upp_buffer_b
)
! o4 x6 L8 ~: i
{
g1 c7 L4 C; u M6 B
upp_error_count++;
: P2 c/ y! s! @& `4 o5 q
}
. V! b. g/ i8 f- U2 y
}
) P% q: F& v$ t' y
}
3 ?' A" p8 D/ V5 O
; u. B4 a3 i8 t, X$ b* v. ^9 k
/* 报告通信结果*/
0 {( t: O% X0 H$ h
if(upp_error_count != 0)
g+ @" s& M# M1 l
UARTprintf( "upp_error_count=%d\n",upp_error_count);
# i2 H2 G6 K3 `& k7 t$ g
else
# E5 H- w8 d( H2 \/ s
UARTPuts("uPP transfers complete!\n",-2);
6 i# ]7 A8 g2 h
- [- X' s& f8 Q1 O
UARTPuts("Do you want to print all the data?(y/n) ",-2);
$ `1 M; L; t4 Y% W; ~
UARTGets(ch,2);
4 T! N% q4 B& n1 z" F/ S
UARTPuts("\n", -2);
1 F, s* k$ a2 O' ^) i' c, i4 E
/ \+ I8 t3 I0 N
if(ch[0] == 'y')
; J* `- o" Z+ d a; q
{
) S5 {) v, G' Z. `
/*打印全部读到的数据*/
" E3 e( B5 g- b: g8 j1 f
for(i=0; i<upp_frame_size; )
, `9 ~4 }. k5 Z
{
$ b8 d" L0 a( D& M$ f9 N) _
for(j=0; j<5; j++)
8 c7 V8 V1 C$ K7 C' T2 Z3 ?
{
3 M" K6 Y; y( Y6 ]" L
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
2 H3 @' c5 w m* r: Y8 ^/ b
i++;
; Z& B: R" t9 r- f, D
//if(i >= 4096)
$ f- j: l& \8 w% a3 j+ N3 o
// break;
0 u0 r- x8 Y1 g- W4 q) T# o& R4 U
/ m2 w7 p* I( g
}
( a* o# r. n8 |* N- w5 r
UARTPuts("\n",-2);
# Q* ?0 g$ ~9 R6 \/ C% |
}
) M: N. ?+ F+ P$ J+ x t d
}
2 j0 Q& z+ q: _. r
9 \, V/ e, R2 @- X9 B) K5 [
}
1 J: `8 D8 I% v* L% X# m
0 a. _. c4 \9 ~' A" }5 s% Q
8 v4 b) ^4 @* q! S7 C
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
% Z r! H9 l. E2 r7 J2 A
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
$ Q, ]" {: A' A* a) ~+ c% ?9 G8 }
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4