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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:9 ?* b5 C) e! p
main文件:
7 I9 k7 u, i0 w6 J0 _7 Hinterrupt void interrupt4(void)  
- r' d; n( L3 k' |: A{% V" M; Y' I6 H$ `: p) I
  Uint32 sample;; k* a* I! u) W- q. D

( z  q' `: d* E3 X& r& N  sample = input_sample(); // read L + R samples from ADC
' v! ~' `. v% Q' R$ C3 n  output_sample(sample);   // write L + R samples to DAC , \- ]3 {$ T6 y$ \
  return;
$ @! W; s3 H& P}# ?4 L, Q. b! ~. |9 d: a

3 F7 `( s+ W5 o. J: ]int main( void )
: ~' W; J& n' Y8 _$ O3 O6 J4 d{
; y- @/ }8 S6 I
5 V3 n  q8 H1 C1 H    /* Initialize BSL */! U5 Z3 }/ q0 F' K8 ~3 o
    EVMC6747_init( );
* Y$ l$ S! ^' Y) V        /* Call evmc6747_intr function */- M- C' i. R3 f
    aic3106_init( );
. O. T4 Y3 B* j, _$ X        while(1);* ~# m$ c# o# e' G2 F2 `
}
% y4 L+ C% F, ]7 F, q# z. H* j. m7 [$ ^( P# g+ K. s, y" U$ I

( E# V$ ?+ M* J- X1 g. r- faic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
6 T: c( {( z4 I# L/* Initialize MCASP1 */9 }! j+ \* ^" E, T  w
    mcasp = &MCASP_MODULE_1;2 g4 C: f& Y& N8 X( t  H: n
    mcasp->regs->GBLCTL  = 0;       // Reset% \3 f4 G$ p( A% i4 g
    mcasp->regs->RGBLCTL = 0;       // Reset RX
4 Z/ ]6 U$ a& x/ x9 k; |6 b    mcasp->regs->XGBLCTL = 0;       // Reset TX" @3 L2 c6 z$ ?" q# I
    mcasp->regs->PWRDEMU = 1;       // Free-running
2 G2 K4 i$ A7 @. y8 k8 n+ L5 H   // configure McASP0 receive registers
( J, ^$ M, p, @5 b/ D  j; M, }    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used, U9 S/ T" s% ~: H
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
4 J0 I. ^' c+ O2 L2 ~    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
; C6 }2 D! m1 V% y    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)% Y% B, P+ u4 j6 n" b: C
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
4 W  ?/ Q3 y7 s! `& x* Q  G* a    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
1 a" x3 ]0 N7 R- W8 R% N    mcasp->regs->RINTCTL    = 0x00000000; // Not used
1 ], i  \+ z: i( ]  g! l    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256$ j" U& v! y$ D. j; k
6 h5 P9 Y+ g2 o' W
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used# {2 K9 I. J; X- w$ U4 L
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus4 n' _& ~% e; Q1 b2 ~& a1 L# z
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word% D. t6 J  f. M' M) W1 U
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-161 o: r; C2 V0 z: {9 a
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
2 z7 C) m- x2 j3 ~% y4 Q: }    mcasp->regs->XTDM       = 0x00000003; // Slots 0,11 l% V0 i7 R5 m
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit) E: W1 ^0 C. S5 D" _
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
; j3 \" S( `* m8 n. |6 D
6 O* ?# p3 {% k) ~* A    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
1 V* |6 T5 G, z7 ]: B& O: R    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
/ Q  V$ |2 ]; X* D* F    mcasp->regs->PFUNC      = 0;          // All MCASPs
1 q- @2 d3 C1 g: f& @# ^5 K. X, e6 o    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX15 V% {& X3 {/ x- E0 x& V

+ s& J/ i- @$ |% X% `" p+ Y4 G    mcasp->regs->DITCTL     = 0x00000000; // Not used; z( i/ M7 H( G7 H4 E  S
    mcasp->regs->DLBCTL     = 0x00000000; // Not used) Q1 U- c; ?+ g9 C. o7 l. p2 W9 L
    mcasp->regs->AMUTE      = 0x00000000; // Not used
3 z/ x: O# v2 ?
  Z* e6 j" P6 I7 w: C  N# D0 t/* Starting sections of the McASP*/
$ `$ P! B0 b4 {4 B0 p    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 9 R2 N0 i. a* W$ }% e/ h
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  0 y4 M5 I9 O$ T7 c! }! F# F" ?- c
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
7 S, A, H# `& q# d7 H6 q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
1 I- T7 t) Y# c/ o" Y' m: V/ f( f0 W" B* R- v
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
. m# b* t1 d) G: w( q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );4 y5 m1 A9 @' o% R5 o; p
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
6 G4 F2 r' Y+ c( w8 P" c- @6 M9 y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );9 @) V2 J' w) W) g1 c; X
3 d, u# _+ \5 x3 ^4 Y4 B
    mcasp->regs->XSTAT = 0x0000ffff; 1 x) k# l5 Y4 w* d; \
    mcasp->regs->RSTAT = 0x0000ffff; + l) V9 Y2 Y6 N1 p! G7 n( g
' N9 }) r$ ^2 |
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
! v9 `3 y6 p" K7 K    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );' ~; Z; w  z. K# `; ]. S" i9 l6 T  O+ b" k
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
9 X. B8 ^3 E$ j. U    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );+ i7 L1 ~. A! n: G
( Q# ~! B0 ~) o' [/ q
    /* Write a 0, so that no underrun occurs after releasing the state machine */! {+ W) o; H  c/ j; V. V
    mcasp->regs->XBUF5 = 0;
, T( m5 L. y1 ^* }& e" C2 M    mcasp->regs->RBUF0 = 0;
& L7 P* L- c" s2 F+ q" w/ R8 v" W' N& K$ M- o9 w% Q" n+ Z
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
" t5 }8 Y3 K; [/ g# A/ {, H& j    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
' R/ P$ h% H# y, F5 J1 g# z    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ; e( p, s: J* U
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );* Q! e3 X( {( _* E+ i' c
6 x$ q# p% j5 y# `6 v6 v1 ^
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; * x" l; M- K3 M
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );8 N. X2 f8 u5 V. ^5 l( o4 S0 ]
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
! N6 Z4 s/ G+ b9 h    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );. k# L) {# P% k

- E4 P5 D! m4 ]    CSR = 0x0000;
5 y) r; i5 V3 d0 o2 |    INTC_INTMUX1 = 0x3d;
" W  r- e# T4 y+ }    ISTP = (unsigned int)vectors;* e& X7 L* A% r7 E
    ICR = 0xFFF0;  
$ j6 U4 {% j) ]4 [/ P" U$ f: u    IER |= 0x12;  4 V- G% `2 [/ ]0 y% k' ^5 R5 R1 }
    CSR |= 0x01;  . l1 u6 @+ |+ p: H4 N1 ~: K' q

5 b$ |% M; l5 M/ w7 l7 ]
7 r5 K, g& o8 }4 [$ l. }) r! m- t8 w) p( z/ A
还有就是两个输入输出函数:
' i$ B: H8 {% {/ Jvoid output_sample(Int32 out_data)
+ Q( }, l6 S; S5 Z8 ~  b' a; M% Z{
2 G- e+ n& i9 F$ H- \  AIC31_data.uint = out_data;  
+ p: v! @/ N& j5 o  MCASP1_XBUF5_32BIT = AIC31_data.uint;
% c5 @7 x% g( \1 h% _$ ?1 r( B2 F}9 W, ^8 b8 q% w
$ o7 S& @! ~* M3 W6 C. e7 _; G
Int32 input_sample(void)- X4 m: G4 F, k' j6 I
{  1 g& ^& t: ]8 F# {" I7 q8 ^7 Z3 C
  AIC31_data.uint = MCASP1_RBUF0_32BIT;; c/ f$ Q- K' ]% w6 G
  return (AIC31_data.uint);
5 N3 A! v0 c3 I' r( q% s}
3 R7 g8 E  {: p8 |% H) Q/ h. [
; l2 I6 r- z, Z  Y# c9 s8 f
分享到:  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-1-13 11:36 , Processed in 0.039750 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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