嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
0 k# h+ `$ S( h- S/ w2 y s
Void UPP_TASK(Void)
3 @6 U; S$ t& M7 ^
{
J u7 v. E& M X. Y+ f; ?) ~# K
, T4 f) H- b% w9 K% c8 S' k
int i,j,k,target_int_count=2;
( q9 Y) p1 s$ r( z& K" _: y
char ch[2];
( Q V v: ]0 W" U1 N
R! x# O0 H1 U
4 G: [2 u' o/ a3 c% m: @
$ |: |) t. M/ {, p- x
upp_interrupt_count = 0;
# x7 K2 }/ v$ \
upp_error_count = 0;
2 B$ L" }) W) m* c, e
' m: m: y; \3 J1 I7 ^3 t
UARTPuts("\tResetting uPP buffers...\r\n",-2);
2 |% |/ w* I! C5 d
// Initialize data buffers
! O3 o/ E4 x# U& D/ a) w
for (i = 0; i < upp_frame_size; i++)
: ?7 f% F. z: f" g, S: b5 J) u9 a
{
0 k- s% p' T; ^. d: Y
upp_buffer_b
=i;
0 i0 p: j7 ~' A" k k# A
upp_buffer_a
= 0xDEAD;
4 E1 `! A2 c! {) d, G' A
}
. Z2 N" G; ]3 p# _4 p/ s2 t G U
$ c3 X8 A7 U' N3 T/ u4 L* \% H8 B
//for(i=0;i<1024;i++)
# i) }% ^$ V x7 Z( u1 E5 l+ e
// temp
=0;
- X" T! O# o V; }- G; u
" W8 l7 X- N: M5 K5 p
//UPPReset();
' |5 V$ F1 G4 g5 H( R
/*启动UPP DMA传输*/
. s4 v1 I9 t. a( ~" [" s7 z
UARTPuts("upp_prog_dma_i\n",-2);
1 E% m% x8 y( ^+ g
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
5 b7 \9 N% L! @) K( K( T8 ^4 u. L
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& i0 M3 G& {! y+ K' t0 b: R8 h4 E
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
& ^! l( W/ y' ]1 b, c) _
3 y5 m7 C2 F, q( q. h5 W
UARTPuts("upp_prog_dma_i\n",-2);
9 D+ @* ^& c( r6 U! `4 ^' C) r
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
$ x* r1 p6 C& P
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 E0 L. j' O! p# R2 z
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
) Y$ K- b4 j$ r' W+ ]- V* i$ l, V4 E5 z
$ o8 f2 e$ X$ E Q h; G4 L3 O
/*等待UPP传输完毕*/
! l m8 M: [1 Y4 @
//i=0;
8 q& ~: G- `3 C ^: g/ b6 S* V; R
//j=0;
) g* f7 N& b7 k- ?) p* g
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
8 ^' J9 @; @3 H+ U
{
}8 Q1 t8 p% l
/* 测试UPP传输的同时操作普通DDR数据
7 Z' W h/ y+ S+ D2 v1 u) w
temp
=i;
2 E) Q8 K& B( r! `
i++;
# z9 a) l# W9 T3 J( ^6 [/ X
if(i==1024)
' V k/ V2 b3 \0 M# {) q
{
9 Z/ z/ P0 R3 X
i=0;
* O& v ?7 M: c& ~ Q4 r8 @ F
j++;
& C3 N; ~. R" S# w5 \/ {
}
6 A6 W; b" d7 w" y# k1 d7 F
*/
* t+ V7 t& e7 S6 s5 ~3 b! Q
+ ~. L: M* J( p8 F1 Z6 ]1 h9 G
asm(" nop");
- y4 m- [7 O2 Z4 h" J8 q [
; X) N! `, c: m2 S4 l
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
" W4 N& \) g8 V. Q* \
}
1 Y$ Q# ~4 G% g6 ~" `/ r# u' d
2 \! S/ |. I! f) [. `8 h
/*检查UPP传输的数据是否正确 (loopback modes only)*/
; a- q' Q- i$ Z! z
//UARTprintf( "i=%d\n",i);
( D( G+ B! U+ ~0 @' v
//UARTprintf( "j=%d\n",j);
; q0 K5 s5 v" e; c
UARTPuts("Data mismatch in buffers.\n",-2);
2 `- T) d) {, E" T) S
if (upp_interrupt_count == 2 && upp_error_count == 0)
! R ]7 s, {4 b# ]1 z Y" L
{
6 E& o- E$ d. G2 g9 [$ |. y1 c
for (i = 0; i<upp_frame_size; i++)
$ D1 T9 m$ J" G# d6 `7 Z
{
( }- ~) _5 X2 j; k
if (upp_buffer_a
!= upp_buffer_b
)
/ N0 K1 n) Z& r! G3 k7 t A2 N
{
, _( |3 n( k" r, S/ L5 x) A
upp_error_count++;
3 @4 z2 j6 p; r2 D( }
}
6 M( \( o. W h
}
; u7 g) I# @- }$ z* H S
}
0 k& |2 ^, h0 R. k) O I5 ^; _/ Z/ J
9 E. T; c# k/ H# M/ m* L* m8 K& I
/* 报告通信结果*/
4 x( b, ^" T$ L' H& r/ }5 S
if(upp_error_count != 0)
0 x# e' q0 t; U, n3 P9 t, R- S
UARTprintf( "upp_error_count=%d\n",upp_error_count);
, p# P ^" m3 [( p+ o, N# M
else
# w ?4 S& H+ }7 e
UARTPuts("uPP transfers complete!\n",-2);
. \% A- |( |( n; M8 C+ w' {
! }( Y9 Z0 s) L
UARTPuts("Do you want to print all the data?(y/n) ",-2);
+ b/ S m/ _# r! Q% p' d
UARTGets(ch,2);
7 }8 r3 U- T: E4 \& y- T
UARTPuts("\n", -2);
5 y0 G- E) L- v) c( f; C
) W# {2 d, u2 g) b
if(ch[0] == 'y')
) [1 j7 _5 W1 F8 U' ~7 {* C
{
- o* H8 ]- B3 v2 K( Z) J9 ]
/*打印全部读到的数据*/
/ V1 S% }- I2 e
for(i=0; i<upp_frame_size; )
0 D% L' Z* ?$ }
{
$ Y) \# j1 u7 l$ d, f8 L; { z
for(j=0; j<5; j++)
4 C3 J6 C V7 S) I5 G& n
{
5 M, u9 V/ f6 y( G( h
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
% n. F7 {$ b* Z, Q
i++;
0 w. |; n' q, i! u+ g8 _7 p: D; \
//if(i >= 4096)
. e& U1 E1 T7 `% ]- S
// break;
. ^0 }. R% n+ g# }) ]/ B+ k
* A' E, G! x# p
}
- s0 W; t) ?( g5 Q- I4 P
UARTPuts("\n",-2);
" i! S( Y& { @0 g5 h. i3 C
}
8 D) x$ P" T5 E" f
}
% _8 h/ \/ o. M- @6 f2 w6 ]6 g! Y e
1 U( P; F9 U4 {: [( _
}
) t1 n D# C! I. M2 a+ a+ M! F
( U- F- a- C0 E1 [& w9 w! U8 }3 F
) J' E# r7 l0 I) x$ K- u& K
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
1 O, K0 t2 ]* c7 U
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
% E/ _9 _8 A- m
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4