嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% ~ J" {7 L+ q+ e+ l
Void UPP_TASK(Void)
- r4 F+ Q: z/ H* B9 h# o A
{
6 [2 B) ^8 f* C2 Z
! B/ g4 I# K+ `; G6 }
int i,j,k,target_int_count=2;
, r8 h3 n# l `- z
char ch[2];
, m( R" H) G6 Z" ?1 s* C
- e/ Q+ j2 I3 A8 R' k3 Y. K
# `, o9 S* ?7 L1 b. y' M
+ {. g/ D I1 u% B
upp_interrupt_count = 0;
9 i7 i, |1 b* _: a- g
upp_error_count = 0;
/ X. y/ z5 P. ?% e8 W0 h# i, p
+ K! N. @+ }- ?( A8 [
UARTPuts("\tResetting uPP buffers...\r\n",-2);
- I! o" h2 O, r. K% F
// Initialize data buffers
/ k9 m: Q. w: U% v
for (i = 0; i < upp_frame_size; i++)
' @6 {0 D5 |' X; z
{
% P- H! M3 ?1 W' F M
upp_buffer_b
=i;
' ]) u- m, H, q7 N
upp_buffer_a
= 0xDEAD;
2 `3 Z P. `& ]+ x0 @* r2 \
}
& w/ u/ `0 v7 t6 ^3 f5 |
: ~; M: k, x: I( |: P% v1 c& r+ A0 o7 y
//for(i=0;i<1024;i++)
f$ q4 u/ c0 h$ G; F2 S
// temp
=0;
7 X/ x- y: q q. x
8 L& V8 Y1 a4 ?0 N
//UPPReset();
# n1 H. }! T# R0 e
/*启动UPP DMA传输*/
; d) D$ h! ~7 J a; ^
UARTPuts("upp_prog_dma_i\n",-2);
/ [ z5 }, B4 d6 d! t' i" ~/ F: B
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
* `- x# N% L+ V0 @
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 u4 q3 ]5 N! u
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% I! I& l6 @. g" `+ ?+ D
% A. ^) p5 p- s( u
UARTPuts("upp_prog_dma_i\n",-2);
0 _$ F8 l5 W; E" V" g1 c8 g
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
" a- b7 f( l- ]% |) R
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ o/ _; h/ U' M8 ^- `2 T: J
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
x, _4 l; b5 j. s' V
2 p2 y. M+ G4 Y- [* ?/ a
/*等待UPP传输完毕*/
# C: }9 G; w' e, N4 |9 e- D G
//i=0;
, G4 A# J- d0 w/ ?
//j=0;
5 X+ a' Y$ K" i
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
3 E! d' t6 _8 d& W8 d0 x, ^
{
( b: ^" T/ O4 u
/* 测试UPP传输的同时操作普通DDR数据
T" K1 f" \6 U( k3 _
temp
=i;
$ _ U8 c5 ]5 r; h
i++;
/ w, q2 W6 i; k) W# }# T( U
if(i==1024)
- ] C6 S% |. _* G% S2 ^/ ~
{
9 j' `% ~6 K+ z# \# ` n' B3 ^9 O
i=0;
' b* c( B+ X) g K9 A) F3 Y9 g
j++;
9 H7 W! A: T6 f& x0 F
}
e! }) }$ p" `$ o6 u* _
*/
7 v9 g) A& ^: @: ]$ }4 D
S5 R, K& v, X" G4 U. d
asm(" nop");
% A. g. \8 N7 [5 r
9 _1 l& U1 l Q) r3 e& {
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
7 A, a7 i O1 n9 w: |
}
4 u& K8 R1 L' D7 `
) ~3 ^: p& z7 f
/*检查UPP传输的数据是否正确 (loopback modes only)*/
( ]1 F, b( ?: b# B2 B8 E
//UARTprintf( "i=%d\n",i);
! K, x" M1 Y! R/ p
//UARTprintf( "j=%d\n",j);
4 k1 D2 @. D$ \. I8 d
UARTPuts("Data mismatch in buffers.\n",-2);
9 z* e7 ~+ J0 q( K9 k! g z3 N
if (upp_interrupt_count == 2 && upp_error_count == 0)
. j# p9 k9 G5 {
{
" U& |% { Q# g0 f" @. P% N
for (i = 0; i<upp_frame_size; i++)
/ U5 u, @1 Z$ U+ ?1 ^
{
; D& L' O7 r8 o g4 p5 Y
if (upp_buffer_a
!= upp_buffer_b
)
9 A6 p/ t0 ?2 N& X @; E# h4 ^
{
- t* H$ @+ ^3 r. Q8 P5 J/ K
upp_error_count++;
/ c3 ~% [9 O# i7 Y( j8 w
}
; y) G/ z7 ?4 D* h
}
/ s4 v/ d# L+ F: A3 e: C' T
}
! U3 c) P8 i0 f6 }8 e& N
* k" u# `" v# O& R2 m
/* 报告通信结果*/
" M( j9 d, |. G
if(upp_error_count != 0)
+ O0 a1 M1 }* m
UARTprintf( "upp_error_count=%d\n",upp_error_count);
/ d. X7 C* F$ p9 g% K! E
else
9 \, k5 r# c- ^' U: w& y/ D- l ]: C
UARTPuts("uPP transfers complete!\n",-2);
; t5 M* Y) U& G5 |; y8 Y, t* V0 I
4 u. R8 Y& |) M$ e$ G# a
UARTPuts("Do you want to print all the data?(y/n) ",-2);
; P/ }% J8 ]: ~: y2 e" I8 Z" B
UARTGets(ch,2);
2 v5 |0 Z* _9 l! ~8 K% W9 q
UARTPuts("\n", -2);
5 E+ L8 \5 Z' ]' O
5 `: B) W5 S7 v( z: {8 f
if(ch[0] == 'y')
, \5 E& W+ ^! A: M& D5 H
{
7 H {, \, j4 j" V! D6 y( ?" }
/*打印全部读到的数据*/
+ x/ M5 k* L4 v, @# {1 S
for(i=0; i<upp_frame_size; )
8 z* X- }) I7 }! U0 g+ T9 ]
{
4 y8 v* A" O1 |; b% |3 n/ d% l
for(j=0; j<5; j++)
8 {: C0 f3 [( O2 [ O* B3 F
{
Z M$ L5 f( M' G5 x# _* z
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
6 F& @5 j7 {9 p% Q3 n
i++;
8 d3 O4 @" R! Z# z5 p
//if(i >= 4096)
- d6 m7 U0 |2 H) U @3 E3 M
// break;
. j. W8 e6 H9 x
" T/ { s4 I3 m7 u* t! r _- i
}
/ E0 Q2 u! }/ k( O
UARTPuts("\n",-2);
9 ?- V4 O3 \% D
}
' [# Y9 x" [) T3 ^
}
- _1 z1 A7 z% h F5 g# T* ]
3 Z! A0 \7 l- i1 m) H
}
; C. I) p2 x0 Q9 \
3 f" G8 c0 ~0 v5 @4 h
+ S( i3 J( H9 `3 I3 P
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
! m4 t1 K J% |' e0 l" a; f" k
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
0 L& H! f' u4 m. j
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4