嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ h: c. x8 V3 f" S( j; A# F
Void UPP_TASK(Void)
; T4 ~9 i* s! E8 {* k
{
9 T7 N) c# h) A) L- W
5 ?4 ~4 }) w0 S0 z' x+ s# B5 M
int i,j,k,target_int_count=2;
5 ^: L/ l: P" F3 B
char ch[2];
2 [7 p5 E: M% g. _% c/ ^" ?) U
7 v6 b! O c& d* N$ C2 {
6 o& U: D. o7 m1 S8 w6 o
7 O2 M9 x5 t" ~+ b) M1 _ \. y
upp_interrupt_count = 0;
0 H# T) S' }0 j1 R( n( c
upp_error_count = 0;
6 v# A$ h) e8 t. I9 s
3 d( a( P0 Y& s, v" E9 \ F" G
UARTPuts("\tResetting uPP buffers...\r\n",-2);
3 s- `8 V8 H C
// Initialize data buffers
- M( V1 h, e) P
for (i = 0; i < upp_frame_size; i++)
8 F A( s8 q9 P* B! i
{
) a4 A* T9 { ]/ B
upp_buffer_b
=i;
3 t8 ]. E) w# [4 N8 a* F/ k/ z+ V
upp_buffer_a
= 0xDEAD;
`, E! m4 F2 P/ L' r) v6 F
}
: _6 p# ]+ n( Z% ] x
9 E- f( }, [+ ~$ g$ s$ J: l
//for(i=0;i<1024;i++)
$ E2 m* ?; G* S( \- Z- H
// temp
=0;
2 d+ D& `! D5 E/ `; m
% P7 w2 X# N$ u( M8 P
//UPPReset();
" K5 K' A! r7 G' t# x: z* V! Q
/*启动UPP DMA传输*/
6 }9 s. {4 G; i. x4 A5 g4 n% Z' X
UARTPuts("upp_prog_dma_i\n",-2);
, U3 s9 @1 Q2 K; _" f- W
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
+ C. P* G9 ]! y2 K2 r: l. ~
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
. [& B% y* d& I' F( H8 b! n) M0 I
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
# b8 L2 E' q Q ?5 [
$ O- E V3 a9 c# E, |$ n& u
UARTPuts("upp_prog_dma_i\n",-2);
d a9 y$ b5 O6 |/ z
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
. h$ h: f: l' ?3 Y* I. |. \
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- F$ w% M" X+ U; w) I6 x
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
9 w0 g S+ T" J \, I) p$ J! ]; N# Q( c
' Z0 l8 m2 W( y$ O( O% @! L; w/ q
/*等待UPP传输完毕*/
7 r" _6 F8 \6 X" y! D. G2 p K; D
//i=0;
! s$ f) y5 h* {3 p3 t/ m
//j=0;
; K b B* N" f, j) n
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
5 U3 v" N# @7 t# A9 S
{
4 g9 P3 h6 m& e; u3 s1 @
/* 测试UPP传输的同时操作普通DDR数据
# l# k* H' r7 M! D* k u
temp
=i;
, E, l' _( l& W1 B4 ~8 w% j' ~
i++;
' d8 p7 _5 `9 t! Q
if(i==1024)
5 G" ]- k! U* k& D
{
: K' M& {8 T: t6 Q7 p
i=0;
& J: }4 i; ?& f+ ~( d0 r0 O+ J1 y5 a
j++;
3 M5 M1 i9 Z+ a" @
}
2 n) y! l: \* C- _) k
*/
1 q, }: ?3 g% M, k9 M
6 [: w' R1 o6 V2 b f& j% n K
asm(" nop");
) n. r( [( g& {! l4 n
% O, ^* Y: {$ i3 F: L( ]* @. S0 G
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
, b; z- s V0 \8 ^, j1 r6 B
}
' j5 A) Z2 E. G$ P: r2 \0 X
. y+ p6 a W/ ~0 G+ P) @/ k. C5 k
/*检查UPP传输的数据是否正确 (loopback modes only)*/
% G/ g) Y" l7 V1 }) j# N4 f6 n
//UARTprintf( "i=%d\n",i);
" k c- S- D! Z' l, d. W7 G
//UARTprintf( "j=%d\n",j);
) C4 U" y% E" E/ q+ p4 J6 R* W$ i
UARTPuts("Data mismatch in buffers.\n",-2);
$ {2 t* u2 u/ r% Z9 a" p7 _4 L- U1 b
if (upp_interrupt_count == 2 && upp_error_count == 0)
, C& O( s4 z( R$ w7 a& A$ g+ d2 z
{
9 {( E2 ^8 N& w) G6 R5 c+ ^8 H
for (i = 0; i<upp_frame_size; i++)
b# ^1 D; M0 Z& S6 T! b
{
# I" m" t/ B( {* F: Q S |
if (upp_buffer_a
!= upp_buffer_b
)
0 K7 V1 i& I5 _2 q
{
" V1 m. c7 ^, _" ?6 x# M( l
upp_error_count++;
. r9 ~+ ^4 Y( T, ?7 B6 s' a
}
& m4 t* C, p2 v, [6 {
}
) {" ]! `8 B, |
}
. F" Q$ N1 I; L2 c' w
: `5 \# G/ a1 g6 V; {4 c
/* 报告通信结果*/
. `0 \3 }/ @1 ^- z3 U/ k0 l" D0 P
if(upp_error_count != 0)
2 k. ]. b3 a6 z" B
UARTprintf( "upp_error_count=%d\n",upp_error_count);
/ u5 Z) ? N \' s! j2 a* h
else
# H7 g6 u, S+ d8 Z: p9 y
UARTPuts("uPP transfers complete!\n",-2);
b& \# N% _) ~
2 f) @! {) S7 U4 _- O* l
UARTPuts("Do you want to print all the data?(y/n) ",-2);
2 L+ T: a4 ]8 M: n7 T9 s: J
UARTGets(ch,2);
4 a& C- x* S: L& z, e& g! b, @
UARTPuts("\n", -2);
- P4 ~# H5 m7 `
3 ?- V0 b' }; J. ^, l
if(ch[0] == 'y')
) F% S( L+ _, E7 Q9 p- l* u
{
6 J: ]$ g$ q5 v+ Z+ [: M
/*打印全部读到的数据*/
) }0 B! X9 A, d) L _: y
for(i=0; i<upp_frame_size; )
: V- }: c9 Z5 j2 R# M
{
9 u3 e4 ~. z- l( A, P! H3 N6 T \
for(j=0; j<5; j++)
1 L# O1 x1 f5 ` O8 p% G* y* v) t
{
* k9 w+ a+ Z0 `$ c+ k+ K+ E6 i5 G
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
! a0 a6 S0 ~, H+ ]
i++;
! `' y- j9 W" R8 s3 f" d
//if(i >= 4096)
) y: |+ I* ]( [# q4 G* r+ G3 I
// break;
+ Z; Z+ C9 [& A- P
4 s4 |) e* {$ b1 K5 s: \% v8 R
}
& }- u! D5 G2 u; _8 \& i/ W" |
UARTPuts("\n",-2);
; b7 I' b, A3 C8 j
}
8 Q9 ^1 o1 f. f v7 z) ~" B
}
, l4 Z5 I1 J) G2 `
; L( x2 k4 Y! i8 s. C
}
0 O* s! v* F4 k
' J0 d: a. u6 J5 Y1 r* T, J
$ N: I8 b1 v& F* ~* H) `% a, M
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
8 w2 h( V# a+ _9 q% Z
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
7 R! R4 {0 Q1 ^& P, P1 q
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4