嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
7 P0 D; {% w p8 ?
Void UPP_TASK(Void)
/ K8 e' W Y5 a8 E
{
6 b* }6 w, X2 D. l$ U
r' N8 ~) K1 e+ K0 L1 m
int i,j,k,target_int_count=2;
' {" t, R. J$ c
char ch[2];
4 |' W4 [9 S5 R! C3 P9 m
. D/ J4 v. z* T6 Q9 w- ^
! \, |: w- K7 i9 l& t( c X
* y) J7 d, D- m) W$ J7 f
upp_interrupt_count = 0;
! {1 e5 \4 J& |1 Q3 N: Q/ X
upp_error_count = 0;
9 e4 Q. |4 P% O; `0 B
4 w- j6 W: [. ~. o: L/ G
UARTPuts("\tResetting uPP buffers...\r\n",-2);
3 [4 n& G; r" K# V; J- c
// Initialize data buffers
# |( \% }8 O3 F7 O
for (i = 0; i < upp_frame_size; i++)
( j4 |, a7 {6 z3 W7 }8 {% _% ^- ~9 W% @
{
, I+ n3 {2 h0 h; h* X
upp_buffer_b
=i;
' z" [0 Q) O6 K3 y2 F; U& K5 M
upp_buffer_a
= 0xDEAD;
" e8 _" i+ r+ P* p
}
5 f8 ~0 W0 t4 O' B# Z S2 x
' A/ R p0 G- y$ W# s
//for(i=0;i<1024;i++)
/ K4 L5 d( T/ L5 R6 P$ i. I
// temp
=0;
% O; ]; V: ]- f! G2 `* ]0 U* G
6 o% L. f6 w/ O. o( V
//UPPReset();
V5 t' O( l& V3 Y: m3 P
/*启动UPP DMA传输*/
5 P9 M! x k; O# }( J* j
UARTPuts("upp_prog_dma_i\n",-2);
% r8 N8 V: q" D; b8 u7 A1 {, j4 m4 ^) G
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
1 b3 }+ A4 T! Z% t
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% G: x# D6 O+ o+ B7 ~9 K' U
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
1 W% H5 A6 V+ L
- L6 ^8 a$ C7 T) M# z
UARTPuts("upp_prog_dma_i\n",-2);
2 m& n7 U" U& U8 B" n( p
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
) |$ U0 C. j k
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 d) ~% V; A; `: x
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
8 `+ x% T# w! m2 f; u5 @! P9 D' m3 A
2 X9 P: L, v0 y0 A$ z9 u5 C
/*等待UPP传输完毕*/
& v- A# I& d" U
//i=0;
3 K; M! h4 S2 o4 l
//j=0;
3 k/ E( e2 O$ E8 [5 B3 J
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
9 R5 Q8 c1 Y6 k$ ^
{
) x, ~ S# w3 F9 l* b
/* 测试UPP传输的同时操作普通DDR数据
3 b( z! u/ V T; F( Q- R
temp
=i;
d) P7 ^ _. A# K# U
i++;
4 p4 v& _0 o- u
if(i==1024)
4 o& _6 ?% x7 M' s) m
{
! v( u8 y4 u) e( u0 |; {
i=0;
& Q& R6 J) ~9 Q' u( S
j++;
: `; W+ P# T9 o( s1 y7 F
}
S- Z5 @$ W6 X) h) }8 l6 D3 f
*/
1 t0 u8 L5 v% i- f! l
( T% t8 F+ |' i; X5 r7 P+ o w
asm(" nop");
K }$ o* Z# v* d( V) R
5 W; a/ T; a9 ?. {/ O' y
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
" N8 {- W& a6 D. a5 B7 K
}
$ w' G- u# P. Y$ }0 O! W# p" s
: ~- _4 N0 ]; B+ D1 u" P% P0 t
/*检查UPP传输的数据是否正确 (loopback modes only)*/
* Z9 M, D" E% j9 r; e
//UARTprintf( "i=%d\n",i);
5 I, c6 z* n- o1 K7 x- ~9 J. {
//UARTprintf( "j=%d\n",j);
4 N1 ], N3 f3 p# c2 k; P
UARTPuts("Data mismatch in buffers.\n",-2);
8 ~6 z& P& R, }- ]/ ]9 F
if (upp_interrupt_count == 2 && upp_error_count == 0)
& U% a% D+ D) e. {/ `7 ?, t
{
% ~& ]2 c' G) x& N* i3 {& _
for (i = 0; i<upp_frame_size; i++)
. l! v7 z$ R5 u( \
{
0 u' U$ ^# v3 B7 ]5 F( |
if (upp_buffer_a
!= upp_buffer_b
)
& c5 W3 w$ B3 d; _
{
6 x' W- I" h( l
upp_error_count++;
7 { u: G8 a F+ \, `
}
0 i7 N* g5 |6 f2 b5 |
}
Q' n; r" i! M+ _" _
}
1 t+ A* e' ^+ h$ H9 ~+ c7 D
* t$ m2 l7 I0 ], D
/* 报告通信结果*/
; U( z" o1 Y, z7 O$ K: p$ j3 Z$ R. a5 K# g
if(upp_error_count != 0)
+ O% s' v8 R1 `9 N- @
UARTprintf( "upp_error_count=%d\n",upp_error_count);
! B2 \# [$ ?# c$ r+ v3 G
else
( F; f6 p$ `' I9 F& x
UARTPuts("uPP transfers complete!\n",-2);
6 P# d$ [/ f$ Q- W' @
% \, K( |3 k. f* P* B8 G: w" G
UARTPuts("Do you want to print all the data?(y/n) ",-2);
) v$ d& {# C3 `4 E
UARTGets(ch,2);
' v1 M( C1 B8 `# G" ]5 U# j, Z$ Y
UARTPuts("\n", -2);
K* g& {2 {& U) q) B+ B- q) b$ {
* O( s% d6 o, F4 x8 d
if(ch[0] == 'y')
- u; @+ S* K, ^
{
. @+ P( T7 b! e+ t- b3 U- F& G8 t3 D- t
/*打印全部读到的数据*/
% |; s9 `3 K. |! h
for(i=0; i<upp_frame_size; )
- f0 D; y8 J7 Y" N9 ~3 {7 O, y
{
0 g& t$ U. P% C, r* A
for(j=0; j<5; j++)
& R9 |& J% m% p$ s$ K% a f
{
5 j1 r, |7 S( u$ i( X7 H
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
! b! M# X% M, G0 ^1 X2 B7 `5 m
i++;
/ L! S! x* Q5 J; ?
//if(i >= 4096)
2 N; r: _9 E. Z( V4 f2 M$ B
// break;
+ w5 K5 Q- i4 `
6 A0 z' m; ]) C: x$ e) r( c
}
0 ^) R" x0 V3 d" I, L: S
UARTPuts("\n",-2);
/ T" d; Q: S5 t9 I6 K
}
3 C: v/ H' i; b* A# Z
}
; U" ?: e7 p3 T9 M8 R
4 [6 d! }1 S8 \5 O7 ~$ ~ M
}
+ Z. f3 F6 l8 w# S8 d/ W+ O
! c8 i/ w7 Q6 n) g5 I. N
6 D7 u/ {: t( v. E5 u* I6 P
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
1 q$ Q1 s7 @5 _8 [7 \, J3 X
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
9 s7 P- {! u8 v& \# S7 W, M: i( }
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4