嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
; C, @% Z( b8 ]* W( `+ Z" {
Void UPP_TASK(Void)
8 V) {( s" B% h
{
5 Q3 K M1 C6 C2 A5 Y& w& l& z
2 ~( ?& C# y2 f3 W8 Q" R3 t5 V
int i,j,k,target_int_count=2;
7 [$ e6 z6 B# E- r
char ch[2];
3 D+ y6 _( S. c0 o7 W7 J6 v9 g
" ~ v, q5 {7 X6 B! t) a! T" I
: N% P% s' Z6 N: L9 X6 t
; e0 B* x0 e2 x4 l
upp_interrupt_count = 0;
7 S0 q$ Y7 n* v# x7 c, b
upp_error_count = 0;
7 K: Y/ b) d& R$ f
& }7 W' R! L/ i$ J& O/ c
UARTPuts("\tResetting uPP buffers...\r\n",-2);
* P4 J2 S, } e% O7 B. r
// Initialize data buffers
" A$ e" r9 h5 v" ~8 q/ j2 d
for (i = 0; i < upp_frame_size; i++)
: D- E" l8 t0 {" o7 r c$ x
{
% d$ ^0 w) j- m [4 X3 V: ?
upp_buffer_b
=i;
% u+ ]5 G4 ?) _/ l
upp_buffer_a
= 0xDEAD;
8 G' o" t M C7 F' p6 r
}
* A4 I }1 c0 e }6 G* _
: y; v5 r: u% m& ^, o( k
//for(i=0;i<1024;i++)
' L- [0 E) s+ D+ ], K9 i
// temp
=0;
9 v; e) f4 ^7 x9 p' N. A; `, j: w% ?
1 Z- y9 b3 ^. z& i: l8 p2 k) G1 p! R
//UPPReset();
: Z% S( q$ D3 l% n3 L5 L( |
/*启动UPP DMA传输*/
" |/ S5 z4 a. |: ?. t
UARTPuts("upp_prog_dma_i\n",-2);
$ B" s$ |9 b3 _' u0 K
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
9 P) C/ X" X1 b+ z3 _% P1 M
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
R8 {: O: @/ t
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
0 b4 c. O8 y2 {9 X5 P4 q
7 @) n1 [) i& \4 L" g
UARTPuts("upp_prog_dma_i\n",-2);
I" k1 |/ [# t. r
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
6 z' q, z% @& E' Q
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 ~/ Z, L7 k* A: c; X. j* b
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
7 r8 E6 d: W5 O4 z7 S
- G( J; I2 z* H2 v
/*等待UPP传输完毕*/
$ Z4 W, A9 v' m, I2 l
//i=0;
1 D7 n# S4 e3 Q( d( t' r7 Y# R8 w
//j=0;
9 Z- t F% G: f, E$ x
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
& R" r: U. O% k! T0 a
{
# a+ E" y0 I, C- I- I
/* 测试UPP传输的同时操作普通DDR数据
% N5 e' W7 b) O4 I. M
temp
=i;
: j% V! D5 c" }* [: ?. x. d4 W
i++;
4 j5 B0 A$ u1 Y! C. U! B$ O, z
if(i==1024)
$ f9 D" e- l7 N( E
{
8 B4 l% w2 g, f
i=0;
5 F" i* j J/ @+ x( }: b' O
j++;
) Z' ?1 a5 a; A7 l3 M- i& L6 T
}
9 z# p3 e9 b" H9 l
*/
# ~0 K/ E( [5 d/ X# s, F" c( @. z
4 x; a v! \9 y3 q( U) O9 u3 v4 u
asm(" nop");
1 F1 G- |% M( j" T' d
3 W1 y( {+ J- ?; ~0 }% y
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
" y& ]0 {$ U0 P! K2 Z6 N, v! O
}
& v* P3 m7 b+ e" K
: L6 @4 v s5 M0 I" M. l5 U: V
/*检查UPP传输的数据是否正确 (loopback modes only)*/
; |4 X% i/ [" |; b4 q. {+ |
//UARTprintf( "i=%d\n",i);
* p9 m% J$ }2 R$ H
//UARTprintf( "j=%d\n",j);
6 e2 {' A" p, A3 o1 [
UARTPuts("Data mismatch in buffers.\n",-2);
7 @! f% j2 V2 a7 x0 Z) y
if (upp_interrupt_count == 2 && upp_error_count == 0)
7 E1 `' D, Y/ q8 a0 }
{
0 H% d% ]" Y; p) }& M
for (i = 0; i<upp_frame_size; i++)
% w9 a8 U$ \6 A: L! R/ `: m
{
+ a2 q# L. f9 C8 Y/ d5 ]. m: Y
if (upp_buffer_a
!= upp_buffer_b
)
/ C/ ~! |( M2 K) k7 q4 ^, \- u) x
{
( j: Q; N. e) I6 R, r5 @$ y8 F
upp_error_count++;
! v, p! A% R" F( u" X/ S
}
. F1 x5 |$ T4 E- a
}
1 a" \: W9 S, D Q9 p: p
}
0 m& o. n ~/ T8 b2 _* S
3 @; }* A* a. {# A( h& u5 O& F
/* 报告通信结果*/
% L/ A7 ^5 v# ~
if(upp_error_count != 0)
, z* g) b3 K0 \
UARTprintf( "upp_error_count=%d\n",upp_error_count);
6 Y3 t/ B$ b+ t
else
4 K# m4 s% ]' w; a# ?0 O
UARTPuts("uPP transfers complete!\n",-2);
" ?7 q/ P& @3 p8 |$ ?# @+ b' X
; `1 w/ X$ n; I5 Q8 I0 F
UARTPuts("Do you want to print all the data?(y/n) ",-2);
% ?" D* u G3 I% a" |
UARTGets(ch,2);
7 g! m3 q# g2 W' F |1 O
UARTPuts("\n", -2);
& Q- N* Y2 P. E
8 q; l5 s0 ^/ Y
if(ch[0] == 'y')
! b2 q% H& h+ r) L; S8 j6 L& ]5 F
{
% S0 W9 n. G& q1 ~6 l
/*打印全部读到的数据*/
8 v/ C, ]. }. r0 s' Y$ L. H" Z
for(i=0; i<upp_frame_size; )
" Q8 I: q8 @2 j' U9 |
{
0 R$ v- S5 n6 D9 E; [1 E/ m
for(j=0; j<5; j++)
& O! V2 X% ?) n" |4 _& J0 L' g
{
* L% b6 L1 v: j9 D
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
- o) ]: e9 G: q' M7 T) `; [
i++;
0 r8 O7 `7 p4 K
//if(i >= 4096)
6 F0 a3 `) A9 d
// break;
. P6 z9 W, T& z$ o: y
5 t+ X- O* G' D4 @, z m
}
2 W8 J0 ?2 s; s& K
UARTPuts("\n",-2);
% f4 k4 y ?6 Q7 Q7 y$ [$ j
}
3 K* p, L/ r( O4 C
}
( Q2 S+ d8 s R9 p S. b0 E' M# t2 E7 g
5 O- w5 O# d* F$ x
}
1 w) d$ @/ S2 ]- l/ |3 F. u% v
& A/ c1 @3 V" \! L: o
) z$ `- u8 ^3 z# c
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
: R1 n& O- e, l) q2 ?; D
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
6 d) n' O; J" H5 j2 V R" w
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4