嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
5 K! J, B0 d% X& @2 ]2 |$ P
Void UPP_TASK(Void)
: G: L$ j& p3 k% {4 R0 y
{
2 s. B# d8 d9 I# i+ ~
, c7 R/ q$ F% ~3 y* F. Q6 w
int i,j,k,target_int_count=2;
3 S7 a) [2 j- K9 u
char ch[2];
. {* l1 m9 W2 A% U% Y
! |4 ~2 n$ |* `0 L% P6 A: Q! \
) K* z1 T9 O3 H
+ [4 j! q. P2 i7 a6 m
upp_interrupt_count = 0;
7 p: T0 V6 H; b3 c
upp_error_count = 0;
( o$ N, O: B% E# F8 `
4 h9 x. V) Z( s
UARTPuts("\tResetting uPP buffers...\r\n",-2);
1 _( i. C( `) ^
// Initialize data buffers
: X8 M) K6 ]6 r6 c7 p4 S; ]
for (i = 0; i < upp_frame_size; i++)
& h M: @ b, Q( B3 g
{
7 {8 N- t' G m4 |7 J
upp_buffer_b
=i;
1 t1 l! x# _1 o0 K
upp_buffer_a
= 0xDEAD;
: c* U( o% g0 z; e4 v5 R& M
}
; t1 T* a+ Y/ R1 {1 N' _4 G' O, ?
' G* e; {- e7 F6 b. [
//for(i=0;i<1024;i++)
, q6 y; K3 ^0 w' N/ ~
// temp
=0;
) \$ G% p6 I6 ]3 E7 Q' M" A# l
" J$ S6 E3 n* q5 I. \1 W
//UPPReset();
) ^+ S0 p' V z) }8 |7 m
/*启动UPP DMA传输*/
! h1 m- U) j* g! z9 L# `% G
UARTPuts("upp_prog_dma_i\n",-2);
1 R6 O4 R3 X4 A: i1 s7 E
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
# |- k8 x6 o# v( O
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% k; |4 r' E2 t: r% @2 c
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
7 j3 p3 ]- S7 }* t5 B* Q7 c; n
, F7 U. R7 \* y4 M5 z$ z
UARTPuts("upp_prog_dma_i\n",-2);
' a; d% o, j$ O- _8 }/ O5 d
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
* R3 L3 Q; ^: Y2 D! s3 p
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" L) J8 l w6 I$ f) ?- r" j
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
- y/ N1 R% F s9 U8 r$ {: r! g6 ^- [2 S
( e# G6 `, k) r% d3 }( F8 z
/*等待UPP传输完毕*/
w1 T+ T; r. {) I5 A8 _+ G
//i=0;
) e( K& s! v o/ A2 R
//j=0;
4 d. P3 Y G* d' B5 q
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
8 Z3 s m3 e0 q+ h7 V @$ d' x
{
3 N" W! x9 [8 ~& J& O( x$ f
/* 测试UPP传输的同时操作普通DDR数据
' v% z$ ^- u$ A$ B
temp
=i;
U& B: F2 g2 {: G) z3 q/ C% |
i++;
4 z0 a P& |/ V( }: |* p5 Z
if(i==1024)
, H1 w$ ]8 q& P0 o
{
# O) Z% p2 a$ Q4 \7 Q4 b% g
i=0;
& G0 q1 [7 ?3 p) q. `
j++;
0 e. N& ~1 V8 U# n+ k
}
3 ~' O# R; {2 H
*/
2 F: c9 ?$ Q! B* D+ N0 C
0 W3 j7 A& q0 |8 Y9 A' C
asm(" nop");
6 |' c* h( t& h- g: u" V( y/ S
1 \# w; q7 g8 H+ ^
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
3 l9 V- [! c. e7 B0 z" x7 S' r, ]
}
% e- c( l L% V) _) }8 k D7 N4 V
# _3 ?9 D8 y9 ^
/*检查UPP传输的数据是否正确 (loopback modes only)*/
% a( `) l5 D5 U8 S; A7 H$ ^
//UARTprintf( "i=%d\n",i);
. v u$ U: d. }2 Q, o4 V/ W
//UARTprintf( "j=%d\n",j);
7 D [4 ^1 N. ?: y7 f
UARTPuts("Data mismatch in buffers.\n",-2);
" M- P7 q0 y; @* x
if (upp_interrupt_count == 2 && upp_error_count == 0)
7 w, r9 t% _: ~, b8 X( y! h B' ^
{
8 {: i2 C2 C( @/ C5 y3 z
for (i = 0; i<upp_frame_size; i++)
: Z- G6 `9 F' x! s O+ d
{
8 g$ }8 m4 }% Y9 J" D3 ^
if (upp_buffer_a
!= upp_buffer_b
)
& H+ B5 O8 d2 h$ F: ^
{
4 N4 q9 y6 J, g) P0 S& c! B* N; H
upp_error_count++;
9 Y" U- p* o3 f' v9 @/ c4 n
}
! i+ R: d+ p1 J% O
}
' C, ~. |' A$ O
}
; w9 H& r/ ^. R8 _, z
5 o/ a! K+ g1 l
/* 报告通信结果*/
8 O; p6 n1 v0 p H% B: R- p
if(upp_error_count != 0)
5 R9 E' Y5 i6 \0 f; t
UARTprintf( "upp_error_count=%d\n",upp_error_count);
9 I* Y' ?: x( Q- L# p* m* [
else
+ Q4 H5 _/ s" G& x
UARTPuts("uPP transfers complete!\n",-2);
# @- `4 N- O0 f4 u9 L/ L' X% m
9 _5 m2 z! l. P9 l& S; T
UARTPuts("Do you want to print all the data?(y/n) ",-2);
2 [% U& G# ]1 S. o9 Z- `# ~# W
UARTGets(ch,2);
/ F5 r; T0 g* @7 U& }. H
UARTPuts("\n", -2);
( f4 U3 Z. n8 r
& @+ l- U2 `' P1 t
if(ch[0] == 'y')
& c. q1 ]- D$ U6 \
{
2 W- P. s. b+ x7 S
/*打印全部读到的数据*/
4 I, a$ S% w3 y8 L/ r9 q5 ]9 n
for(i=0; i<upp_frame_size; )
9 I4 j2 M, e1 V/ z! Y
{
9 P4 K; Z$ Z( b3 K! Y
for(j=0; j<5; j++)
3 z' L( ~& c9 I1 l! i
{
4 m A5 u8 Q4 L, h4 w
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
% l- s1 t; L9 J, L. T
i++;
2 p; I9 J) X$ \+ E; g4 F
//if(i >= 4096)
9 n0 Y0 r- \- T! A9 l/ a
// break;
) ?- C2 Z% u- A
' x7 v- N) c0 o; O* ^2 y1 f
}
9 ~2 s4 Y+ K- q: N
UARTPuts("\n",-2);
0 x' l& M7 U) M0 \# O( O; g5 Y r& Z
}
: ?3 w- V% ?" o# U0 v( z: \
}
- ]; m, q7 y! u4 z
; W5 l1 W( `: E5 q
}
) z, ~2 C. N) ]9 m- x
0 V! c6 z# a/ M
' J! ]& W D1 ]3 R' B
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
# s0 a. h1 x- m( R/ r! j9 [/ F
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
0 Y! h$ ]7 ]1 U
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4