嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
7 M( P8 n9 o" O5 R7 Y
Void UPP_TASK(Void)
' P+ F- V- F1 }7 m2 I0 y6 T
{
% P: Y: ~- M) O- w
: O2 T3 o r* F2 i/ }) r# K7 v) w9 |
int i,j,k,target_int_count=2;
! |! R4 Q; ]6 U
char ch[2];
2 n: B# B- _# L1 `5 D
& m" P$ D: N3 Y* ^1 \+ v
$ ^; q) Q" d6 L7 t# f
! o3 F: K$ a |* m- S) o0 ^
upp_interrupt_count = 0;
, u- u: H$ ~+ k _
upp_error_count = 0;
4 M# U* F5 m- t3 d
( U4 S0 l( h: V
UARTPuts("\tResetting uPP buffers...\r\n",-2);
/ d* v( ^. B. t# n
// Initialize data buffers
' b/ e% e- `- d3 m2 U9 H
for (i = 0; i < upp_frame_size; i++)
- Y4 `) O2 I* g+ m8 |8 n) W
{
$ A6 g1 b7 c; R' @2 v) T4 y
upp_buffer_b
=i;
5 ~2 K3 L* W( K( i8 q) J. |3 H4 U
upp_buffer_a
= 0xDEAD;
% @: ^" v; o/ H
}
- n! k1 n, d" I, ]
5 x! u' d. T8 @! h( a% ^6 R. i
//for(i=0;i<1024;i++)
6 @" B+ w+ d+ _- f+ l# f
// temp
=0;
. G9 b0 c& P% V1 {7 h" f) r
( Z! S' \. i! E9 A- u
//UPPReset();
. J" u1 C8 c+ b( q/ p
/*启动UPP DMA传输*/
3 ^2 Z3 u: L' U- J$ b+ F4 X; d/ r
UARTPuts("upp_prog_dma_i\n",-2);
2 w+ ?- N" t8 q
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
: m' f% d7 w8 g
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
m1 y5 u6 f& }2 I2 v5 x) I
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
/ C- o8 ?6 z! g5 c$ i
+ f- ^: ^; q% E( G5 r; v) U
UARTPuts("upp_prog_dma_i\n",-2);
8 S3 V3 ?# v y5 h
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
S; p& X. [5 b( |
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' c" M5 P- K( K; ^+ P+ h
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
/ z' D m5 a5 A! u7 ~) h" r! y
. o2 u* @9 m) L2 a5 z
/*等待UPP传输完毕*/
+ e" a3 ~) y& m6 @9 `% }
//i=0;
# t* V7 _& q1 H8 X) H0 |
//j=0;
" d9 N- r9 U) K6 h' G' G
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
! B/ l+ k- a: j9 l/ S6 D
{
: e& o% Y6 s; ^# L3 }
/* 测试UPP传输的同时操作普通DDR数据
% y$ f( A' O6 i; E- W% U1 w; g8 r
temp
=i;
6 m! o1 Y( \/ V
i++;
2 e% i0 L* j$ H
if(i==1024)
5 F! m' x+ Q( s, P$ j8 S, h9 S
{
9 I) _2 `: m3 b
i=0;
]: S! g: E9 y% Y/ ?
j++;
/ [6 M, d5 x/ g9 J5 G
}
) V+ p9 V, r, A) D, d" d0 P* c
*/
' [# a$ Y- L" A" q& V
% j& [3 z+ H8 E+ }+ i6 |# Z6 v2 k
asm(" nop");
% t( F( y4 K# @, c
! p2 q' L7 a+ W% B- e! z
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
8 T$ m; Y" f! u! P
}
, G2 d' s- B4 a% `' T
! ~+ p1 S9 v8 b: c$ ~8 s
/*检查UPP传输的数据是否正确 (loopback modes only)*/
) u7 n r# L( [- t3 k
//UARTprintf( "i=%d\n",i);
' t/ T3 @% S7 z. m. L
//UARTprintf( "j=%d\n",j);
* {0 } Q& p' d% W0 o
UARTPuts("Data mismatch in buffers.\n",-2);
% c' p0 i# `' y* A
if (upp_interrupt_count == 2 && upp_error_count == 0)
% D; T ^* A% d9 L
{
- h# g& y8 Y/ W m5 _; I
for (i = 0; i<upp_frame_size; i++)
- Y' c, w2 r7 Z0 [: f0 D4 {
{
2 n, L6 r* K5 r& ~
if (upp_buffer_a
!= upp_buffer_b
)
; v! ?6 h |; x- u
{
4 L) S# ^/ ?+ I* m6 t7 F
upp_error_count++;
% A& q" K; e/ E w. `9 U
}
6 ~1 p9 |5 G# b% t
}
6 x( v/ f3 Z) y5 N/ ^
}
1 l* w/ H" Y' @ F0 S" u8 V
1 h9 H2 {! c9 a% V" h, a
/* 报告通信结果*/
! W& h2 r* w/ d9 C
if(upp_error_count != 0)
- W) U/ n! x! j: o
UARTprintf( "upp_error_count=%d\n",upp_error_count);
- w3 Y8 y! @ B' ?6 L- k
else
3 o$ @& u- k$ j/ T0 E, L
UARTPuts("uPP transfers complete!\n",-2);
3 ?* d* t1 J/ p: p0 b U2 d, |3 P) \
( p- h7 x# N z
UARTPuts("Do you want to print all the data?(y/n) ",-2);
/ ~. b9 x3 H" k" N! E
UARTGets(ch,2);
: y7 m; S( {2 i0 m4 f7 M, x5 N7 U
UARTPuts("\n", -2);
8 t$ v2 d* j8 d# r8 K
7 L. }# G m3 Y/ P' q- R
if(ch[0] == 'y')
3 i4 j3 O7 s' Z0 f1 ]* l( {
{
2 [, ~. H0 J- k; r, m
/*打印全部读到的数据*/
\. b! L! P" ?; i% U
for(i=0; i<upp_frame_size; )
& v% z( [9 a2 y8 ~8 k
{
4 h3 g( p' \0 u- Q4 F8 C, |
for(j=0; j<5; j++)
5 Q, H; R( P8 M- i
{
3 ?) f& w" d7 l; v
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
! h2 n! @: c8 B+ M
i++;
6 r1 Y+ M* `9 U6 \! L0 m3 e m
//if(i >= 4096)
! f- t4 T, X4 k+ P
// break;
; O7 G% g) F/ w' J/ h
; c: t$ U R( C" X K
}
, T: u- f4 z$ g. b1 d+ N* i8 F
UARTPuts("\n",-2);
0 i6 L3 j. Q9 |, E) g
}
/ g; Y0 i! D6 b4 {6 K* s
}
- }# a. T* L! l
* k; m" W0 ?# X, b% ]* C/ l8 F
}
, i9 O2 k6 o$ z
# ]8 x0 \1 V/ f# t7 `
9 s' u, }3 O2 F% R/ L
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
$ r) W7 }3 P' _/ u _4 `4 c
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
0 J# F7 n" d1 x9 N( x& E
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4