嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
( Z- f& F7 d% z
Void UPP_TASK(Void)
3 \2 L4 Y( q0 J) |7 l2 S; {
{
" O7 Y0 a9 R' n, @/ y1 L8 x \9 H
6 T) Y! P4 O5 r% ^
int i,j,k,target_int_count=2;
/ P: r- Z1 G& w0 t3 l
char ch[2];
, W* x# L1 e+ n) M
/ U& |4 D7 S& `7 h; r N# l" Y* L; M9 P B
* m# u* i3 D1 J9 f' x
( c6 Y9 ?! S4 E7 w# k9 }# L! ^
upp_interrupt_count = 0;
[/ R. w, r4 V$ o
upp_error_count = 0;
: n6 z! u) W" y& c5 H
% v/ Q: @, s n
UARTPuts("\tResetting uPP buffers...\r\n",-2);
3 U2 e/ _' S; d& M
// Initialize data buffers
( U! N! t1 G3 z# \' v% [- ?4 Q
for (i = 0; i < upp_frame_size; i++)
& r. m A7 k, p8 J# q
{
5 R; [" v# ^$ [ |; G4 p
upp_buffer_b
=i;
: _/ r" ?* s6 D" r+ @: e+ M, o
upp_buffer_a
= 0xDEAD;
! t. q9 T/ q5 `5 L3 Q; p& p
}
6 u" F# ^& V5 L. {
8 X, V( I! f# s/ k2 R& } k) u
//for(i=0;i<1024;i++)
5 I+ T7 ^4 D# I' [
// temp
=0;
& u J$ j- {( F2 e3 Y* T
( R$ q6 e9 K4 ]3 K: Y3 \# g
//UPPReset();
- s8 A' n m9 A) q! h1 M
/*启动UPP DMA传输*/
1 M$ m& g B1 x
UARTPuts("upp_prog_dma_i\n",-2);
! G; `% v% t6 C! H' |
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
* A; s* k) L/ I4 Z$ J% \$ D6 D6 n
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
1 t+ |$ s3 D- |5 V1 k4 W5 t! {
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
5 L1 v8 l, O& F! a* A# v3 B
0 }+ |6 ]0 t: x/ ? J( p. F3 |
UARTPuts("upp_prog_dma_i\n",-2);
$ [( U$ C4 \9 _6 O/ Y
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
U' C9 h& W0 b5 {0 L% F* K
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; C: N- L) R8 U# O& h1 M
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
! S( W, D5 I5 f& g
/ c) Y* n. {, `+ [- {, M( Z4 T. U
/*等待UPP传输完毕*/
, U5 O1 s+ P/ R( P$ q. }1 X2 \
//i=0;
% q5 m/ d T7 b+ w; d% b# E
//j=0;
% R, z" V3 |, }0 o: r
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
1 g6 {0 Z `. z: u3 d9 u, C
{
6 L' E0 d0 g2 ?' S" g5 T: l
/* 测试UPP传输的同时操作普通DDR数据
0 \0 @& H3 M. M4 e# D9 Q8 E
temp
=i;
2 x4 s; H/ z3 O& u
i++;
# m, E2 \0 R% o* o2 z- n# O
if(i==1024)
% O' t; l* m/ T% {6 W+ {
{
# R9 z9 `+ [% K; D! m
i=0;
1 Z8 `' n1 e" _. @
j++;
+ w2 I# P- ?! y9 }" |
}
+ P, }4 M: c& E) P% E9 ]
*/
" |3 P6 c5 Q8 p i5 E7 i2 Q
3 i8 q S- i0 v8 b" y1 _6 [' a/ ~
asm(" nop");
7 G8 ^; g# V8 c& e, V7 A/ _! \3 }2 L
& P3 u: v0 R1 g) V+ e2 V b
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
. G! O8 o" g4 r8 o' l; I9 K. ]
}
5 S* _4 q+ U; i/ q
, Z7 `1 \+ ~" t$ ^, V
/*检查UPP传输的数据是否正确 (loopback modes only)*/
- k# F. `+ f, `* |( R
//UARTprintf( "i=%d\n",i);
: j5 a* Q9 d; P! W' Y6 \
//UARTprintf( "j=%d\n",j);
0 _% J. I* g% o7 o$ A6 a* J
UARTPuts("Data mismatch in buffers.\n",-2);
- C% b) d7 W! M! e# A2 N3 h; D" _
if (upp_interrupt_count == 2 && upp_error_count == 0)
5 b* `5 E) n% `+ k# C
{
% b) z# x" a0 w2 A; L: w
for (i = 0; i<upp_frame_size; i++)
) z3 Z) S% _2 m$ d, d# _
{
. |$ l4 j R6 ^0 p( h* K
if (upp_buffer_a
!= upp_buffer_b
)
/ l8 z$ O& p$ p2 \% O
{
; R; j9 M2 X9 Y7 X1 k3 P
upp_error_count++;
& {$ o* x3 `4 g7 D8 m1 S: s. h1 C' S
}
! w1 t4 Z; o) w: g
}
( z1 Z/ n$ U0 ?( h
}
' `2 A. O H+ i0 i5 W8 E" {
9 k. A/ f4 e! j- x; ^; q
/* 报告通信结果*/
: s9 O+ j$ w A' f6 d G
if(upp_error_count != 0)
/ D" a8 D; R& P) M d3 N
UARTprintf( "upp_error_count=%d\n",upp_error_count);
; o1 W( y0 ?8 n+ E8 H; w
else
( ] x2 u1 W9 z1 p
UARTPuts("uPP transfers complete!\n",-2);
$ T: j3 d. F: O9 p; \3 R" {
8 |6 m, R! R$ W
UARTPuts("Do you want to print all the data?(y/n) ",-2);
- r0 e t# ?$ B! f! ~; L
UARTGets(ch,2);
* e& F# M$ e* l- i) w* }% a S
UARTPuts("\n", -2);
# `0 g3 t) k$ n
1 p# n* X; S3 N
if(ch[0] == 'y')
- N4 D4 Z6 X. ?4 h3 X4 t4 Y
{
0 ?+ y& Q+ V3 H& c; w* K* l: k8 [
/*打印全部读到的数据*/
& q3 q" ^9 L$ m i# h
for(i=0; i<upp_frame_size; )
. L+ u! c9 z& `& B5 B6 K
{
: | X' P+ |$ h3 e( E
for(j=0; j<5; j++)
: L- h4 E V( J: M
{
/ k" m8 n) z# ? j. P6 `
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
: U' f, ?1 n3 F3 f( C4 _
i++;
, t; k; A) A; e2 ]) J) l) m7 }/ X/ \
//if(i >= 4096)
) I& s, c5 m# H
// break;
0 ?, q5 m( n$ A
' Z3 n7 {" P% O7 G ^4 o* L
}
7 y& `0 t/ \0 ]
UARTPuts("\n",-2);
0 K3 P3 z; V. N3 S
}
- \1 z# a n! T! M
}
6 D9 k% L1 L9 g: C' ?$ `
6 Z8 g0 L8 z. o# N
}
: W2 P3 M s. g# p8 M6 f/ u
0 j5 w9 t4 S j# S
2 i+ w% `+ g3 G: D2 B8 |7 g. w
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
5 _7 C% `. z ~* w/ @. P
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
0 l0 v& M+ E1 `
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4