C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6630|回复: 1
打印 上一主题 下一主题

C6747利用McASP发送中断方式完成音频输入信号的直接输出

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
$ j, o5 G! N1 _# t+ mmain文件:
% x& }* B9 s2 K* ainterrupt void interrupt4(void)  3 M) {# O* C5 J7 w1 g7 k) c/ y! C
{' K* X- H: e) Y" X
  Uint32 sample;
: Q9 z+ u; o! d. \3 {/ }% P" h* l9 ~3 p% ]6 j, G4 l
  sample = input_sample(); // read L + R samples from ADC
  m* ^7 F+ [$ e0 w/ H4 z  output_sample(sample);   // write L + R samples to DAC
5 c" {$ G, E& c. O& e  return;. C+ h5 d- C( i6 y
}* x7 }+ V) u' S  _+ z
3 r; X8 A& p# f. J" W
int main( void )
# s* `5 g! c/ u{( G9 K/ K( G2 w: m8 R* g
6 r9 x7 Q+ [& A; L
    /* Initialize BSL */
  D( n2 W' c5 c8 z2 q* G7 |    EVMC6747_init( );% B/ v4 W0 u6 @- C/ {
        /* Call evmc6747_intr function */) I4 I% c$ p, [9 n
    aic3106_init( );
( r! c7 G  @: g' X        while(1);0 ^- @4 _) D, ?4 \
}
# K+ u+ ]9 ]# g+ `! F  @6 a. R0 S
2 v) V1 M7 r/ h" F
0 _2 ~4 c7 a2 t' g$ U/ @- caic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
  U+ y9 n2 g* _+ t! x1 }$ a/* Initialize MCASP1 */
! ~# }  X  H: d) k    mcasp = &MCASP_MODULE_1;
* ~1 s! L; |8 [6 E4 g$ P, W: J    mcasp->regs->GBLCTL  = 0;       // Reset0 \3 t' F5 Q8 n1 J3 [
    mcasp->regs->RGBLCTL = 0;       // Reset RX& M. C( {$ d6 ]. E) K
    mcasp->regs->XGBLCTL = 0;       // Reset TX5 x; a' r: n1 u) ^, S
    mcasp->regs->PWRDEMU = 1;       // Free-running
2 w0 {4 d2 p! G% ^6 D, X) w# c" u' A   // configure McASP0 receive registers7 v2 W- R' o2 p) T+ G5 @9 ]& |
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
. c& n  \3 P6 H) m7 X3 S2 l- E3 E    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
: H' B! A+ c  `- c4 C8 \4 I    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
" o# P$ n. q) g, b4 D% s# P8 E    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
& @: K) V: \& M4 j  z    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
% y' V+ p- F6 D' q    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
( B  p1 @$ W# i& T- d! P    mcasp->regs->RINTCTL    = 0x00000000; // Not used
# b. Y2 k0 `# j2 |    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
& X2 L7 Z  y/ p5 ~
, o+ X  w4 a- i  ]/ ~: a    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
( {9 M% L' j( j7 r! S- T! x    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus/ z$ J' C6 [2 W) @+ ~$ t  \
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word6 H% ^' q! F  w
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
; V6 }$ k% t$ Q% R" B! u0 o' I. [$ q    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
) d% w+ A$ e* g; W    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1. z/ D7 q0 Q3 L) @
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
' a: M5 i4 Z& ?* `! K: m# q    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" U* S( ~8 y! N. s
* I* m$ J* C6 [. \: a* W0 o5 y7 o    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN& O) `, p+ M! l
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT( a' T2 j. U, B. [6 C
    mcasp->regs->PFUNC      = 0;          // All MCASPs& ~- J' L; i/ o5 @9 h
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
6 h- [' l2 b) J* u: e* e! n$ Z* \, U" _  Q4 q4 R: m9 d
    mcasp->regs->DITCTL     = 0x00000000; // Not used7 |4 i5 s3 z( E+ q( Z5 H
    mcasp->regs->DLBCTL     = 0x00000000; // Not used' H! u8 i2 b4 e; Q
    mcasp->regs->AMUTE      = 0x00000000; // Not used
4 v+ z( g% p6 H: D
: e$ @; `. C" J' y& Q/* Starting sections of the McASP*/  U. V! z2 a+ B' \8 J
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; & t2 N: R+ C* P( L
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
, J$ X" i3 `* [2 z    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
5 U) V; ?7 b/ x5 w0 b# U* r    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );. p* G3 d) K5 o  U/ l/ o5 ^0 I7 B3 O

" n2 ]! X+ g. k6 F3 W$ t: P! v+ ~! I8 y    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
" r' r9 r7 M# s- R0 _& v7 m, b* O    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
9 A% t# `3 Z! v1 W    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; * e- b. h" _% m2 w; w! l
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
! k: W, m) [: w; i; I4 c$ ~* c7 }# n3 E1 e
    mcasp->regs->XSTAT = 0x0000ffff; 2 z* ?/ v( Q( j3 N$ E' w
    mcasp->regs->RSTAT = 0x0000ffff;
. M& u6 S( O) g6 v
" N& M( w. T5 M8 H9 w9 w# I    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
5 I+ N( ~3 d. i$ s    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
& p* C3 _) q* I& |6 ^4 u% ]: j2 J    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; . S% _: z! l, N6 J' s
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );* v7 a. c1 @- R( S

) E& i8 D) K' r! t    /* Write a 0, so that no underrun occurs after releasing the state machine */9 ]5 B* V6 y/ H7 x
    mcasp->regs->XBUF5 = 0;
; l, a! h: U0 G% i( W    mcasp->regs->RBUF0 = 0;
5 I* T$ I$ O( j8 D, b$ \0 z4 p: w" d$ J" [+ l3 J! b5 W6 {
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; - M9 Q& V$ k4 U& y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );7 h# ]: ^% e% l8 ?' M3 t
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
. }# Q* X" \& I    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
% a6 ^3 e. R$ z1 F/ ~4 U
8 N& P+ j1 O! V7 ]2 \    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;   H1 Y: ^0 e. L  g$ \. f
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );6 Z# y' a9 s* H' a/ c# L8 i3 c
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
1 s# h) L  l( u2 m) F* L+ F, b4 q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );8 L8 b+ j! ~3 w6 C
. E0 g' ?9 n. O9 W0 a( V; r) e
    CSR = 0x0000;
' I8 K3 L: u0 S( N" ^/ A  H    INTC_INTMUX1 = 0x3d;
- L0 z  Y9 I7 A    ISTP = (unsigned int)vectors;
6 Z, Z$ ]7 L/ a% }% |6 F9 Q3 @    ICR = 0xFFF0;  . P3 C: B: o0 s5 v* V) h' r/ P/ y
    IER |= 0x12;  
$ n( W  S: e$ V    CSR |= 0x01;    U- @% a  C! Y

7 I* m" }, L) t
. P3 t* t$ \* o9 L( U, }5 v) @0 U! E4 Q1 d% Z$ v( D+ \$ t
还有就是两个输入输出函数:: g$ L+ \9 S* L7 L9 m
void output_sample(Int32 out_data)$ |: f# L$ X# c/ A3 O
{  M0 F6 K8 z6 P' \# n, ^4 ^4 }
  AIC31_data.uint = out_data;    r0 t; z' q6 @
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
9 \% I0 s- p& T$ I; f6 j) L+ t: n}/ s) q7 C+ }4 K& f/ C+ G

) P: o7 S3 H) R# pInt32 input_sample(void)+ @& f$ ]/ F- r
{  
0 n  `' U0 p( h  AIC31_data.uint = MCASP1_RBUF0_32BIT;
! ?2 I( o3 v. r( P  return (AIC31_data.uint);0 p; ^) m: r( H9 k
}
; f9 X! r- R+ Q5 d+ p6 ?# A! k
# J+ W" C/ Y# X# Q4 x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2016-3-16 11:55:59 | 只看该作者
可以参看创龙提供的例程:AUDIO_LINE_OUT_INTR——Line Out 音频输出(中断方式)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-3-23 09:59 , Processed in 0.045851 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表