嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
1 E! X1 e; J" {) C+ N7 m! n
Void UPP_TASK(Void)
9 c' L. s+ s- R0 |) j
{
$ c; f( {/ Y0 x; c
/ a3 J: c6 `8 |( e8 F( O: s
int i,j,k,target_int_count=2;
/ R! N1 l2 U, W5 C
char ch[2];
; H) [; |) p$ j# g o; Z4 ^9 c
# i# t6 l- Y! K5 ~$ S {
( }) y! `: ?* r0 F) j
3 C- m6 [) x4 u
upp_interrupt_count = 0;
P' s/ m$ `0 F$ | G
upp_error_count = 0;
0 E) l$ e2 V2 y+ e
, @5 d. z* }' C3 d9 \
UARTPuts("\tResetting uPP buffers...\r\n",-2);
+ e+ ^" J$ J) u, ~
// Initialize data buffers
0 x3 ^0 C. ^+ h0 j
for (i = 0; i < upp_frame_size; i++)
- W5 `/ o( [" w# r4 Y2 v# y) o% n
{
$ n3 ^' k# R _1 M3 ^
upp_buffer_b
=i;
6 Y: ]( T) _$ V D- {9 ~
upp_buffer_a
= 0xDEAD;
" m7 o* z: U; l) m F9 Y' q H$ J
}
Z1 p- k+ b& i* e
4 L3 X* t$ I5 P5 S5 J3 j& ~" e, ]$ @
//for(i=0;i<1024;i++)
0 p/ T& E( \! d# z' z
// temp
=0;
$ @1 S0 z4 t+ D/ z. M2 Z
8 a/ k8 ?, V, P2 Q% L1 U
//UPPReset();
4 I: P( B6 `6 q; c
/*启动UPP DMA传输*/
+ Y3 v3 |8 U& p" o: d
UARTPuts("upp_prog_dma_i\n",-2);
$ F& n) j! L8 O+ Z2 {: A
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
' P2 y& A" q3 Y$ _# ?9 d4 i) M6 I
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) r% `4 d& j% ^4 u
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
1 ~% w6 T5 h, q( P
0 n1 n2 i* F$ h4 d9 z/ k) Y
UARTPuts("upp_prog_dma_i\n",-2);
8 u. p2 [2 E. g9 P5 h/ g
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
) v/ [ Q0 f+ ~! |4 l+ M$ l; k6 s
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: e- F0 w) E- C% [% z
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
0 m6 _: {4 K/ F @! j8 {: k
0 x4 @* q8 L1 ?& n1 [7 X7 b: u
/*等待UPP传输完毕*/
3 }) m) C5 [* w
//i=0;
7 @0 J7 ]% l% |1 z/ C# h
//j=0;
' ^# Z& H! Q' k" P
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
4 F8 g! }# G, C
{
- |1 D( G5 w, c
/* 测试UPP传输的同时操作普通DDR数据
5 s6 d+ X! c# i; [; E& ~) w/ N
temp
=i;
% f3 B! n) W# ?- Q, x! W
i++;
$ ^' T& t7 Q! `7 J3 X: x' n! D
if(i==1024)
6 P: z( v6 p3 T% L* L( ]* O
{
7 E8 a# n% B4 o& t5 ?
i=0;
; P$ m' b: w* {3 I9 B4 a& {
j++;
7 z# ?# y) m0 Y g4 c- M
}
9 \( ?( h% w' K2 D1 ?5 a6 }" |7 H
*/
a# N' D" S& R- P
$ x8 N! k& Z( M# W( P
asm(" nop");
) I1 T" Z5 W3 P" ?
2 P, V0 @ |% @/ z
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
/ L. j3 ?0 l# |; _
}
( u* } L) H3 W' T
; K" \# i. b% |( }
/*检查UPP传输的数据是否正确 (loopback modes only)*/
' V) \# f1 M/ G( w- H- V1 C
//UARTprintf( "i=%d\n",i);
; d, b: |' ?6 J7 A3 i
//UARTprintf( "j=%d\n",j);
9 u8 k1 H! d0 F" D F/ J: Y
UARTPuts("Data mismatch in buffers.\n",-2);
* A- x( H1 o$ o1 _5 y6 W
if (upp_interrupt_count == 2 && upp_error_count == 0)
' h. q. F4 A) V" `6 o9 F
{
' I) w0 ~6 x" I
for (i = 0; i<upp_frame_size; i++)
) H. r4 f5 k% l$ I
{
- u! `, N, \$ }7 j w; ?
if (upp_buffer_a
!= upp_buffer_b
)
* @- }0 m. |. A& N$ y- `+ V
{
. i0 g F; E. G5 N/ Y) H! f
upp_error_count++;
5 F/ R7 |8 B5 K
}
. g' S* M7 a+ Y% D0 ~, E
}
! O7 N- A8 o) b7 Z" q3 i6 j" O
}
6 v% a# J5 Y0 \8 Z9 \1 L: Z4 |
7 C: w% f3 q! ?% w
/* 报告通信结果*/
9 R8 Q4 g6 O2 G0 E+ \
if(upp_error_count != 0)
6 F. V/ L3 M9 Y3 |% a
UARTprintf( "upp_error_count=%d\n",upp_error_count);
) G6 }( x- p _% Q. {: x/ {
else
9 `: X# {$ j. n
UARTPuts("uPP transfers complete!\n",-2);
( m0 X% J4 S6 j; b7 F0 G( W; L7 @% `
- f$ |7 g% M! I: n0 H9 y: S. j& b
UARTPuts("Do you want to print all the data?(y/n) ",-2);
4 \! {0 o& j9 I. g. c) J
UARTGets(ch,2);
# i) t3 Y9 I' _4 t; C
UARTPuts("\n", -2);
! F8 M- Y1 b' Q: k# k9 ~
9 A! c$ |9 L% x. Q/ Q- J! _" _# F! x
if(ch[0] == 'y')
; h0 N" T, T# ~% G
{
! d: j6 _0 H4 U9 v( b. R; T4 F9 |$ |8 N
/*打印全部读到的数据*/
7 B4 G6 f- b8 B3 x) x( R
for(i=0; i<upp_frame_size; )
: ]1 ^4 O4 J; G6 q% v# o
{
/ M% ~# I/ ?) n7 C6 X4 ^
for(j=0; j<5; j++)
- | k: f6 { u0 r
{
! ]9 T) T+ y1 B/ n6 B+ f9 E
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
4 |( n* a2 `0 }& v4 b. e4 j& g0 U
i++;
( F6 t3 v! K R! N
//if(i >= 4096)
' c7 I) q& b1 l: u
// break;
6 R0 x! Y9 i7 G
# S; J4 |5 y) ]: A7 V; f& {
}
) P0 @3 k$ w( \7 X
UARTPuts("\n",-2);
1 q w( D- r2 \5 y7 I, U
}
! M5 \/ \$ k! p# g6 E: |' Z# C
}
1 D. G7 s+ M+ u# o, S- V# @
" j; r5 S. h8 V. q5 l
}
# y) }, E: O: Z$ j9 g( k& ?1 W
7 `2 I5 { f2 W5 A6 F/ e4 \1 f& d. }! D
W$ k o+ P r
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
0 @7 N* C0 @ j& n
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
+ f/ |0 j2 A0 ]/ ]4 K6 @. P
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4