嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
; } {: d0 W7 @- B2 T% M, r
Void UPP_TASK(Void)
' q7 {& l; Q4 H6 C) J$ x7 ]6 q4 {
{
% H7 G9 j; E1 U8 g
% {4 H0 X1 n4 P
int i,j,k,target_int_count=2;
# i) l$ Z* V0 k# B. e4 G0 F
char ch[2];
2 m2 @8 S; ^4 @, M7 k8 W1 X& g
0 h% x% [ D: h" H$ h6 {: i
% p4 a% q! e0 @$ M) W3 W% l
k: ^" O' Y: U% Q- m
upp_interrupt_count = 0;
) j @6 l4 g& @% D4 l
upp_error_count = 0;
3 {0 V" _% K! c" M4 {5 h
; i- R- P; l# @, d5 r2 e' K
UARTPuts("\tResetting uPP buffers...\r\n",-2);
" w7 P, _9 {2 M. ?! G/ A
// Initialize data buffers
- U. E+ {( m1 i# v3 U5 o3 A2 d
for (i = 0; i < upp_frame_size; i++)
, b3 y: I$ L0 j3 Y
{
) E U7 \0 @1 |5 K
upp_buffer_b
=i;
) j$ P; w# P H2 z3 ^
upp_buffer_a
= 0xDEAD;
" {; ^0 z- e' H- u- }( Q
}
9 Q( {; b* W; h& k. r$ @$ z
2 @! t2 t+ o* e" @ j! w
//for(i=0;i<1024;i++)
9 W6 |7 _+ Q8 e7 b& Z y! w$ T
// temp
=0;
9 z4 S7 p* [5 c5 S$ T" U
7 P8 `* H/ \: `2 n5 ?$ T# `) W
//UPPReset();
5 I# P0 c+ B) E" j T- R1 R
/*启动UPP DMA传输*/
0 d; a* I/ e% g U* T a4 J' T
UARTPuts("upp_prog_dma_i\n",-2);
" r/ N0 s" {7 ~
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
2 x2 C/ R, k3 a6 ] _
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& r" q; I, i$ m e. q4 E
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% x( D% }8 y% ]# V' W
4 L2 P3 h- i( Q( U
UARTPuts("upp_prog_dma_i\n",-2);
, L; U' X- @# i
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
5 Z3 }0 }+ m5 g g) D
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
`; ^" ^: ]: _, y3 ^
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
) z) |7 w4 D2 p
; r) v8 F, g( D ~
/*等待UPP传输完毕*/
+ d0 I5 Z5 h0 ^0 j6 V$ Q+ O1 r! y
//i=0;
5 V- ?4 u6 q* k) L9 l! `
//j=0;
- G' \( L0 ^* z; i& R
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
3 R( J! A& p0 C
{
/ s) p; y# F9 E
/* 测试UPP传输的同时操作普通DDR数据
- N5 f4 i+ v z8 G
temp
=i;
E: a4 J# E) [4 i
i++;
, x9 a+ S/ e y& F& e! |3 t" m3 o
if(i==1024)
/ M+ f; {7 l0 [2 N1 o2 @
{
! p9 V j! L) e0 u8 C' g
i=0;
7 |7 C2 P6 T) A/ U' R, M, r) _- {1 E
j++;
0 J1 Q& U4 r$ H
}
! k W" ^; S8 r4 G. C7 \
*/
^, j6 M! w8 O# K- s0 J
& H+ V" N- L# Y, Z) p/ i
asm(" nop");
& O& n% S: i7 F& \1 n. r& Z$ N* k
. U0 d+ Q( N2 x+ A6 x
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
# u' K6 o( y# P" H8 P! u
}
/ j6 [# F4 b6 x* j) [4 S
/ ], w4 p! a: S: |) e5 A* w+ U9 I
/*检查UPP传输的数据是否正确 (loopback modes only)*/
, a4 L+ ^+ S2 u& g% n6 p t
//UARTprintf( "i=%d\n",i);
% \+ Z% E/ u+ d, }" w
//UARTprintf( "j=%d\n",j);
! Y$ t7 W+ J9 F
UARTPuts("Data mismatch in buffers.\n",-2);
, x1 o& b) I$ b" O0 m" V
if (upp_interrupt_count == 2 && upp_error_count == 0)
% O1 k3 t6 R/ I& R; F- Q
{
- k$ W5 U1 f8 E F) L) {3 l
for (i = 0; i<upp_frame_size; i++)
" x* S* s) M: C& e# R3 V7 _
{
4 e5 }. t) S& k; q7 Q: l3 Z n
if (upp_buffer_a
!= upp_buffer_b
)
$ ~) k2 ~% t8 a, v; D. ^1 u
{
l0 u7 K. F/ n5 I! a& U* Z& Z
upp_error_count++;
( z6 V+ n$ R ~! n9 ^* ~- K
}
1 e+ F# k! V2 p) V) z+ r0 z
}
! g1 d b: s* ~6 x
}
' v: Z! N; o/ }; l4 J3 v
' v7 |5 c5 x2 `2 c5 N, U6 |
/* 报告通信结果*/
. E* c0 m o/ a$ r
if(upp_error_count != 0)
) E5 n5 I) x% M, E0 x
UARTprintf( "upp_error_count=%d\n",upp_error_count);
$ S7 x2 K$ x ~. ]$ s7 Q: [3 k# H
else
) q, |8 r: H, p/ N H' A
UARTPuts("uPP transfers complete!\n",-2);
" U) a! n+ h) w s* t/ |* ^8 Y
" Y0 W& O: V/ E( n8 P p4 i
UARTPuts("Do you want to print all the data?(y/n) ",-2);
: o4 n( F# k; y! b, J- Y, x: E) K
UARTGets(ch,2);
& I- x/ Z/ \% Z9 G- p+ K
UARTPuts("\n", -2);
' H; V; R6 D6 c) @5 d' u
# K e* z. k) N4 U
if(ch[0] == 'y')
. @; C# B8 E- o0 t2 g' r) r
{
$ { u" M c" |2 J$ Y9 q$ o
/*打印全部读到的数据*/
3 f# L9 B$ h: o0 Q4 D
for(i=0; i<upp_frame_size; )
7 {2 W" M1 g6 C$ ?. D4 ?
{
/ M9 _ i4 \5 m; c) g8 p! K0 X6 Y# Q
for(j=0; j<5; j++)
7 y( W) V) H; r& b
{
& E- ^: I: I4 a! ]- d) x' p- J8 q7 o
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
& h3 R r5 [& U: @ {7 W. @! E4 n
i++;
3 F6 u4 ?5 y: |7 j% E% [* i2 A$ J
//if(i >= 4096)
$ p7 r2 w, D* {5 T& D, d7 ]8 m( y
// break;
& Z; L2 E% B$ ^6 V/ i+ `
" ~/ X8 \' e* Y7 p; }" e& X
}
" i* h5 ~. g0 C) T+ D
UARTPuts("\n",-2);
6 N4 H/ I/ V2 G3 ^* R
}
) Y6 b" R6 y; q" P/ h0 A$ `
}
7 K& a$ V! c% V' ]
. L% O( f. M" k4 @! ^
}
# Y) w/ d# ]- e
/ }; s) M9 g+ R) s3 u$ u7 k
K( |, j7 Q/ ~: j9 j
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
* o8 w9 x/ s/ ~
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
4 q* X9 D! G9 g, ]& R0 J
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4